キャプションの長さに応じてCButtonをリサイズするには?

解決


ハジメテ  2008-03-03 22:27:32  No: 67705

VC++6
XPの環境です。

CButtonに貼るキャプションはstringで持っていて動的に変化します。
そのstringの長さに応じてボタンの大きさを変えるにはどうしたら良いでしょうか?
ボタンをCreateした後、
SIZE size;  BOOL bRet = m_pCUIButton->GetIdealSize(&size);
していますが、この関数自体に失敗してしまいます。

また、そのボタンはリソースエディタで作成しているのではなく、動的に作成しています。フォントも変更したいのですが、うまく出来ません。

すみませんが、詳しくご教授お願いいたします。


ハジメテ  2008-03-03 23:18:19  No: 67706

キャプションの長さに応じたボタンのリサイズは自己解決しました。
CDC *pDc = m_pCButton->GetDC();
CSize cSize = pDc->GetTextExtent(); //文字列のピクセルの長さを取得

/* ButtonのCreate時に指定したRECTを再計算 */
rect.right = rect.left + cSize.cx + lMarginH; //lMarginH 縦方向margin
rect.bottom = rect.top + cSize.cy + lMarginV;  //lMarginH 横方向margin
m_pCButton->MoveWindow(&rect);  //ボタンの移動

こんな感じです。
しかし、、、
フォントの変更は相変わらずできません。
動的にボタンを作成しているため、リソースエディタからいじれないのです。
すみませんが、ご教授お願いいたします。


Blue  2008-03-03 23:20:53  No: 67707

SetFontしているのでしょうか?

ちなみに、ボタンがある間はフォントハンドルは有効でないといけません。
http://support.microsoft.com/kb/85518/ja


PATIO  2008-03-04 00:58:18  No: 67708

実際にフォント設定に関しても自分がやって見たコードを提示した方が
良いと思いますよ。
言葉で説明するよりも多分早いし正確に伝わります。
とはいえ、そのまま長々貼り付けられても読みにくいと思うので
コンパイルに支障がない範囲で省略した方が良いと思いますけれど


ハジメテ  2008-03-04 00:59:54  No: 67709

Blueさん、どうもありがとうございます。
確かにできました。  追加で質問して申し訳ないのですが、
Windowsのデスクトップ上で右クリックしたプロパティ上の、
デザインタブで設定しているフォントサイズはどのように取得するのでしょうか?

よろしくお願いします。


subaru  2008-03-04 01:33:49  No: 67710

>Windowsのデスクトップ上で右クリックしたプロパティ上の、
>デザインタブで設定しているフォントサイズはどのように取得するのでしょうか?

SystemParametersInfoにSPI_GETNONCLIENTMETRICSを渡すと
NONCLIENTMETRICS構造体に各フォント情報が取得できます。


ハジメテ  2008-03-04 20:46:18  No: 67711

できました!ありがとうございます。


ハジメテ  2008-03-04 20:46:48  No: 67712

できました!ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加