- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ウィンドウのフレームの色変更)
ウィンドウのフレームの色変更
このQ&Aのポイント
- ウィンドウのフレームの色を変更したい場合、GetClientRect関数を使用してクライアント領域の色を変更することができます。
- しかし、クライアント領域の外側にあるフレームの色を変更するためには、別の方法が必要です。
- 詳細な方法については、助けを必要とする方に向けて具体的な方法を教えることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
非クライアント領域の描画の際には、WM_NCPAINTが送られてきます。 ということで、OnNcPaintになります。 あとは、好きに描画してください。ただし、非クライアント領域すべてを描画する必要がありますので、キャプション、メニュー等がある場合は、フレームだけ描画ではだめです。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.3
>新規に作成したウィンドウのクライアント領域の色は、 書かれていたクライアント領域の方のソースを見て気になったんですが。 http://www.okweb.ne.jp/kotaeru.php3?q=609410 あえてこうしなかったんですか?わざわざ自分で塗ってますけど。
質問者
お礼
回答ありがとうございます。 深い意味はありません。 成り行きで作ったため、ツギハギだらけになってしまいました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.2
一応、調べればわかると思いますが。 非クライアント領域を含むウィンドウのデバイスコンテキストハンドル取得 CWnd::GenWndowDC() フレームの幅等の取得 ::GetSystemMetrics() WM_NCPAINTのwParamで渡されるリージョンがほしい場合は OnNcPaintを使うのではなく、CWnd::WindowProcをオーバーライドして、SDKのように自分でメッセージを処理してください。
質問者
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 以下のようにして目的を達成できました。 フレームの幅(全体ではなく枠の細い幅)が分からなかったので4としました。 void CMyWnd::OnNcPaint() { int cyCaption = 4;//GetSystemMetrics(SM_CYCAPTION);//タイトルバーの高さを取得 int cxFrame = GetSystemMetrics(SM_CXFRAME); // フレームの幅 int cyFrame = GetSystemMetrics(SM_CYFRAME); // フレームの高さ COLORREF crCaption = RGB(250, 250, 0); // 塗りつぶす色 CRect rcWnd; GetWindowRect(rcWnd); CDC* pDC = GetWindowDC(); pDC->FillSolidRect(0, 0, rcWnd.Width(), cyCaption, crCaption);//フレーム上部 pDC->FillSolidRect(0, cyFrame, 4, rcWnd.Height(), crCaption);//左 pDC->FillSolidRect(rcWnd.Width()-cxFrame, cyFrame-cxFrame, 4, rcWnd.Height(), crCaption);//右 pDC->FillSolidRect(0, rcWnd.Height()-4, rcWnd.Width(), 4, crCaption);//フレーム下部 ReleaseDC(pDC); }