リストコントロールの文字の大きさ

このQ&Aのポイント
  • リストコントロールの文字の大きさを2倍にする方法について質問です。
  • リストコントロールに配置された文字の大きさを2倍にしようとしていますが、うまくいかない問題が発生しています。
  • リストコントロールの項目の間隔は正しく2倍になっているようですが、文字自体は大きくなっていません。何が問題なのでしょうか?
回答を見る
  • ベストアンサー

リストコントロールの文字の大きさ

ハンドルがhWの主ウィンドウに hL=CreateWindow("LISTBOX",NULL,WS_CHILD|WS_VISIBLE,0,0,600,400,hW,HMENU(IDL),hI,0); でハンドルがhLのリストを配置して hF=CreateFont(36,(16,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"MS Pゴシック"); SendMessage(hL,WM_SETFONT,(WPARAM)hF,1); として文字の大きさを2倍にしようとしたのですが リストコントロールは2倍になったと思って項目の間隔を文字が2倍であるかのように開くのですが肝心の文字が大きくなりません。 何が問題なのでしょうか?

  • keyguy
  • お礼率68% (895/1314)

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

設定したフォントを削除していませんか? コントロールが使用している間は保持しておく必要があります。

keyguy
質問者

お礼

ありがとうございました。 解決しそうです。 フォントをメインウィンドウのものと共用していて メインの描画はペイントが終わればフォントを削除していたのでその影響でリストの文字サイズが大きくならなかったみたいです。 共用をやめればうまくいきました。

keyguy
質問者

補足

またまたありがとうございます。 上記指摘でいろいろやってみるとメインのWM_CREATEメッセージを受けて処理をすれば大きくなりました。 この時点で当初の問題は解決しました。 実は今まではWM_PAINTメッセージでやっていたのです。 だから何度もメインの描画の度にセンドしていたのが悪いのかもしれません。 最終的にはウィンドウの大きさに応じて文字の大きさを変えたいので何度でも遅れるようにしたいのです。 一回送った後2回目送るにはどうしたらいいのでしょうか?

関連するQ&A

  • リストコントロールの文字の大きさを可変に

    ハンドルがhWの主ウィンドウに hL=CreateWindow("LISTBOX",NULL,WS_CHILD|WS_VISIBLE,0,0,0,0,hW,HMENU(IDL),hI,0); でハンドルがhLのリストを配置して項目として "This is a pen." と "That is a book." を配置するときに文字の大きさをメインウィンドウのサイズの2倍にしたいのですがどのようにすればいいのでしょうか?

  • hPF=SelectObject(hD,hF);は何故エラーに

    HFONT hF,hPF; ・・・・・・・・・・・・・・ hD=BeginPaint(hW,&ps); hF=CreateFont(10,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,  SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,  DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"System"); hPF=SelectObject(hD,hF);//ここがエラー ・・・・・・・・・・・・・・ において hPF=SelectObject(hD,hF);//ここがエラー を単に SelectObject(hD,hF);//これでエラーでなくなる とすればエラーでなくなります エラー内容は Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland goo.cpp: エラー E2034 goo.cpp 808: 'void *' 型は 'HFONT__ *' 型に変換できない(関数 __stdcall WinProcedure(HWND__ *,unsigned int,unsigned int,long) ) *** 1 errors in Compile *** hPFを後で使いたいので困っています どうしたらエラーがなくなるでしょうか?

  • 最初ボタンが見えない

    ボタンを大きく中央に表示するプログラムを作りました。 しかし中央をクリックするまでボタンが現れません。 どうしたら最初からボタンが現れるのでしょうか? またフォントをクリエイトし続けてリソースは尽きないのでしょうか? #include <windows.h> #include <stdio.h> HWND hB; LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP) { RECT rt; char s[99]; int W,H; static HFONT hF; switch(wM) { case WM_PAINT: GetClientRect(hW,&rt); W=rt.right-rt.left;H=rt.bottom-rt.top; DeleteObject(hF); hF=CreateFont(H/4,W/4,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_TT_ONLY_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"MS Pゴシック"); SendMessage(hB,WM_SETFONT,(WPARAM)hF,1); MoveWindow(hB,W/4,H/4,W/2,H/2,1); sprintf(s,"幅=%d,高さ=%d",H,W);SetWindowText(hW,s); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return(DefWindowProc(hW,wM,wP,lP)); } } WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int) { WNDCLASS wc; --略--(ここにウィンドウクラスwcをクラス名"I"で登録) RegisterClass(&wc); hW=CreateWindow("I","ボタンの親",WS_OVERLAPPEDWINDOW,0,0,0,0,0,0,hI,0); hB=CreateWindow("BUTTON","子",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,0,hI,0); ShowWindow(hW,SW_SHOWMAXIMIZED); UpdateWindow(hW); while(GetMessage(&ms,0,0,0)) { TranslateMessage(&ms); DispatchMessage(&ms); } return (ms.wParam); }

  • 日本語不可のフォントで日本語を出力させた場合の動作についての質問

    現在、任意で指定したフォント名を使用してある文字列を表示するようなプログラムを作成しています。 CreateFont()の文字セットには、SHIFTJIS_CHARSET、タイプフェイス名にはArialを指定しても環境によっては、日本語が文字化けしたままとなります。 何故、そうなるのか分からない状況ですので、ご教授ください。 また、解決方法がございましたらお願いいたします。 表示する文字列:テスト ⇒ 出力結果:□□□ 現在、CreateFont()には以下の指定を行っています。 CreateFont(X, ※1 0, 0, 0, 400, TRUE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_DONTCARE, Y); ※2 ※1 X:任意のサイズ ※2 Y:Arial CreateFontで作成されたハンドルはSelectObjectで関連付けています。 よろしくお願いします。

  • フォントをカレントディレクトリから読み込む方法

    win32アプリケーションを作成しています。 フォントを、WINDOWS\Fontsからではなく、そのアプリケーションがあるディレクトリから読み込む必要が出てきたので、 hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"MS ゴシック"); を最後の引数だけ変更して、 hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"./hoge.ttf"); のようにしたのですが、読み込めていないようです。 MSDNを見ると、最後の引数はフォント名だとなっているので hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"hoge"); としましたが、やはりうまく行きません。 どのようにすれば、カレントディレクトリのフォントを使用できるのか、わかる方、ご教授お願いします。 環境はvc 2005, XPです。

  • 5^3をAPIで表示するために

    HDC hD; PAINTSTRUCT ps; TEXTMETRIC tm; HDROP hDrop; HFONT hPF,hF; string str; int i_w,i_h; ................................................................ case WM_PAINT: hD=BeginPaint(hW,&ps); SelectObject(hD,GetStockObject(OEM_FIXED_FONT)); GetTextMetrics(hD,&tm); i_w=tm.tmAveCharWidth; i_h=tm.tmHeight; SetTextAlign(hD,TA_LEFT|TA_TOP); ///////////////////////////////////////////////// str="5"; TextOut(hD,0,0,str.c_str(),str.size()); ///////////////////////////////////////////////// hF=CreateFont (i_h/2,i_w/2,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS ,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"System"); hPF=(HFONT)SelectObject(hD,hF); ///////////////////////////////////////////////// str="3"; TextOut(hD,i_w,0,str.c_str(),str.size()); ///////////////////////////////////////////////// SelectObject(hD,hPF); DeleteObject(hF); EndPaint(hW,&ps); return 0; とすればできますがCreateFontによる文字サイズは思うようなサイズにならないことが多くてやってみないとサイズが半分になっているかどうかわかりません 酷い場合には半分のサイズを指定しても全くサイズが変わらない場合もあります 上の例では i_h=18でありi_w=8でありCreateFont後 キャラクタの高さはi_h/2=9となりキャラクタの幅はi_w/2=4になってくれました しかしこの場合はたまたまうまくいったので通常はこうはなりません 確実にもとのサイズの半分(面積比1/4)のキャラクタサイズにする方法を教えてください

  • Edit_SetTextでのフォント指定についての質問です。

    Edit_SetTextでのフォント指定についての質問です。 Windowsのプログラム作成で、hEdit = CreateWindow(。。。)で作ったウインドにEdit_SetText(hEdit, "文字")で文字を書く処理を作っておりますが、この文字のフォントを変えるのに苦戦しております。 ちなみに、hFont = CreateFont(20, 0, 0, 0, FW_BOLD, TRUE, TRUE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS ,DEFAULT_QUALITY ,VARIABLE_PITCH | FF_ROMAN, "MS ゴシック"); SetWindowFont(hEdit, hFont, false); を試しましたが、フォントの高さの値は効いているのですがフォントが変わりません。 どなたか、ご存知の方おりましたらご教示お願いしたく、宜しくお願いします。

  • エディットボックスのフォントを変えたい

    MFCで作ったダイアログ上の他のコントロールはいじらずに、 エディットボックスのフォントだけを大きく変えたいのですが、 行間が変わらない為か、文字の下のほうが切れてしまいます。 色々試してみていますが、どうしても出来ません。 元のダイアログのフォントは12ptです。 OnInitDialog関数内で、 CFont m_font;(メンバ変数)に以下を設定し、 m_font.CreateFont( 20, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, 0, SHIFTJIS_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "MS P ゴシック" ); OnCtlColor関数内で、該当エディットボックスの場合だけ pDC->SelectObject( &m_font ); しています。 CreateFontのパラメータが間違っているのでしょうか? それとも、これら関数を呼び出す場所が間違っているのでしょうか? ご回答お待ちしております。

  • TABによるフォーカス移動

    実行環境: Microsoft Visual Studio 2005 質問: TABによるフォーカス移動が行えません。どのようにソースを変更すれば宜しいか教えてください。 以下ソース //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HINSTANCE main_inst; static HFONT main_hfont; main_inst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE ) ; static HWND hEdit1,hEdit2,hEdit3; switch (msg) { case WM_SETFOCUS: SetFocus(hEdit1); break; case WM_COMMAND: switch(LOWORD(wp)){ case ID_EDIT1: if(wp == VK_TAB) SetFocus(hEdit2); break; case ID_EDIT2: if(wp == VK_TAB) SetFocus(hEdit3); break; case ID_EDIT3: if(wp == VK_TAB) SetFocus(hEdit1); break; } case WM_CREATE: hEdit1 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_AUTOHSCROLL, 106, 89, 158, 34, hWnd, (HMENU)ID_EDIT1, main_inst, NULL ); hEdit2 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_NUMBER|ES_AUTOHSCROLL, 106, 143, 158, 34, hWnd, (HMENU)ID_EDIT2, main_inst, NULL ); hEdit3 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_AUTOHSCROLL, 106, 198, 158, 34, hWnd, (HMENU)ID_EDIT3, main_inst, NULL ); CreateWindow( TEXT("BUTTON"),TEXT("起動"),WS_CHILD|WS_VISIBLE|BS_MULTILINE|BS_CENTER, 89, 301, 112, 40, hWnd, (HMENU)ID_BUTTON, main_inst, NULL ); main_hfont = CreateFont( -19, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_MODERN, TEXT("MS ゴシック") ); SendDlgItemMessage( hWnd, ID_EDIT1, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_EDIT2, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_EDIT3, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_BUTTON, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • フォント指定の受渡し法?

    私が作成中の .NET C++プログラムはフォント指定を他のC#アプリから受取っており、そのフォント指定に基づいて文字を表示することになっております 受け取るフォント情報はC#のフォントダイアログにより選択されたものです 具体的には (1) M S 明朝, 9.75pt, style=Italic (2) HGPゴシックM, 20.25pt, style=Bold などといった文字列です 私が作成するC++ではこれらの指定に基づいてCreateFontするのでしょうが、上記のC#フォント指定と下記のC++ CreateFontパラメータでは差があり過ぎて、どのようにしたら良いのか分かりません font.CreateFont( 20.25, // フォントの高さ(大きさ)。 0, // フォントの幅。 0, // 0でOK。 0, // 同じく角度 FW_DONTCARE, // 文字の太さ FALSE, // イタリックならTRUEを指定 FALSE, // 下線ならTRUE FALSE, // 取り消し線ならTRUE SHIFTJIS_CHARSET, // フォントの文字セット OUT_DEFAULT_PRECIS, // 出力精度の設定 CLIP_DEFAULT_PRECIS, // クリッピング精度 DRAFT_QUALITY, // フォントの出力品質 DEFAULT_PITCH, // フォントのピッチとファミリを指定 L("HGPゴシックM") // フォントのタイプフェイス名の指定 ); C#のフォントダイアログからの情報を簡単にC++のCreateFontのパラメータを作り出す方法はありますか? またC#から受け取る情報が基本的に間違っており、別の情報があるのではないかと心配です 宜しくご指導願います

専門家に質問してみよう