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

解決


ハジメテ  2008-03-03 13:27:32  No: 67705  IP: 192.*.*.*

VC++6
XPの環境です。

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

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

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

編集 削除
ハジメテ  2008-03-03 14:18:19  No: 67706  IP: 192.*.*.*

キャプションの長さに応じたボタンのリサイズは自己解決しました。
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 14:20:53  No: 67707  IP: 192.*.*.*

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

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

編集 削除
PATIO  2008-03-03 15:58:18  No: 67708  IP: 192.*.*.*

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

編集 削除
ハジメテ  2008-03-03 15:59:54  No: 67709  IP: 192.*.*.*

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

よろしくお願いします。

編集 削除
subaru  2008-03-03 16:33:49  No: 67710  IP: 192.*.*.*

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

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

編集 削除
ハジメテ  2008-03-04 11:46:18  No: 67711  IP: 192.*.*.*

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

編集 削除
ハジメテ  2008-03-04 11:46:48  No: 67712  IP: 192.*.*.*

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

編集 削除