ATL 複合コントロール

[戻る]
HB 2003/02/06(木) 15:29:47
こんにちわ。
ちょっと助けてください。

今、複合コントロールのActiveXを作成しています。
そのビューの上に、スタティック等を貼り付けたりしたりしています。

それの色を貼り付けたコントロールの色を変更することができません。
イベントハンドラでもOnDrawがありません。

なにか方法がないでしょうか?

よろしくお願いします。

渋木宏明(ひどり) [E-Mail] [HomePage] 2003/02/06(木) 16:19:28
>それの色を貼り付けたコントロールの色を変更することができません。

スタティックコントロールの親ウィンドウ側で、WM_CTLCOLOR を処理するのでは駄目で
すか?

>イベントハンドラでもOnDrawがありません

ATL の Windowing Support クラスには OnDraw() はありません。

画面表示に関しては、WM_PAINT を処理することで代替します。

HB 2003/02/07(金) 11:56:30
お返事ありがとうございます。

ところで、お返事を参考にして作成しようと試みた所
WM_PAINTを以下のように下のですが、最初のif文に入ってきません。

LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
 if( wParam == (UINT)IDC_STATIC1 ){
   ; // ホントはここに描画処理を書きたい
  }
  return 0;
}

何か足りないものがあるのでしょうか?


また、スタティックコントロールの親ウインドウ側でWM_CTLCOLORを処理する方法
があったら、教えていただけるとありがたいです。
(メッセージループとかないですよね?)

よろしくお願いします。

渋木宏明(ひどり) [E-Mail] [HomePage] 2003/02/07(金) 15:26:41
>何か足りないものがあるのでしょうか?

足りないも何も、メタメタです。。。

WM_PAINT メッセージのリファレンスを確認してください。
wParam は WM_PAINT では未使用です。

>また、スタティックコントロールの親ウインドウ側でWM_CTLCOLORを処理する方法
>があったら、教えていただけるとありがたいです。

WM_PAINT メッセージの処理を(正しく)追加するのと、根本的には何ら変わりはありま
せん。
出鱈目にメンバ関数を追加したところで、それが使われることはありません。

ATL の CWindow クラスを使っているなら、ヘルプの

[ATL ウィンドウ クラス] - [ウィンドウのインプリメント]

というトピックで、「CWindow クラスによる Windows メッセージの処理法方」が解説さ
れているので、それを参考にしてください。

古いスレッドには追加発言できません。