- 締切済み
メニューから色取得
使用ソフト[visual c++] 初心者でわからないのですが、画面をクリックするとその場所にTextoutで出力するようにしたのですが、この文字をメニューから色を選択し、その色で表示できるようにしたいのですがわかりません。 お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >画面をクリックするとその場所にTextoutで出力するようにしたのですが、 ↑ これは出来るんですよね。 >この文字をメニューから色を選択し、その色で表示できるようにしたいのですがわかりません。 ↑ まず、描画するとき TextOut() よりも前に SetTextColor() 関数で色を設定します。 この設定する色をグローバル変数や static な変数で用意してメニューから色を 選択したときにグローバル変数などで用意した色変数に代入します。 そうすれば、メニューで選択している色で文字が描画されます。 ・下にプロシージャ関数を省略して載せておきます。 プロシージャ関数: LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { static COLORREF crColor; ←これを用意 static POINT po; ←座標用 switch ( uMsg ){ case WM_COMMAND: switch ( LOWORD(wParam) ){ case ID_MENU1: crColor = RGB(0xFF,0x00,0x00); break; // 赤色 case ID_MENU2: crColor = RGB(0x00,0xFF,0x00); break; // 緑色 case ID_MENU3: crColor = RGB(0x00,0x00,0xFF); break; // 青色 default: return DefWindowProc( hWnd, uMsg, wParam, lParam ); } return 0; case WM_LBUTTONDOWN: po.x = (short)LOWORD( lParam ); po.y = (short)HIWORD( lParam ); InvalidateRect( hWnd, NULL, TRUE ); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hDC; hDC = BeginPaint( hWnd, &ps ); SetTextColor( hDC, crColor ); ←これを追加。 TextOut( hDC, po.x, po.y, "文字列", 文字列の長さ ); EndPaint( hWnd, &ps ) return 0; } default: return DefWindowProc( hWnd, uMsg, wParam, lParam ); } } その他: ・上記の WM_COMMAND メッセージで ID_MENU1~ID_MENU3 となっているのがメニューが 選択された時の ID です。そして crColor 変数にカラーをセットしています。 ・描画は WM_PAINT メッセージで行っています。 よって、クライアント領域をクリックしたときにカーソル位置を po に保存して、 再描画の指定の為に InvalidateRect() 関数を呼んでいます。これによりクリック されると WM_PAINT メッセージを処理するようになり文字が描画されます。 文字の描画が WM_LBUTTONDOWN メッセージに書かれている場合は適切に修正して下さい。 ・以上。
お礼
無事に色変更できるようになりました。 ありがとうございました。