- - PR -
VC++60MF APPWizard:オーナ描画ボタン上にマウスカーソルを置くと新たなブラシで描画させたいのですが
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-07 21:32
おせわになります!
void COctalButton:rawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { if ( state & ODS_DISABLED ) { .....(略) } else if ( state & ODS_SELECTED ) { .....(略) } else if( state & ODS_FOCUS ){ .....(略) } else { .....(略) } (略) . . . } で, オーナ描画ボタンをクリックした場合などをブラシでオーナ描画ボタン上を描画できるのですが、 追加で、 オーナ描画ボタンの上にマウスカーソルを置くと 新たなブラシでオーナ描画ボタン上に描画させる方法がうまくいきません。 ご教授ください! | ||||
|
投稿日時: 2006-02-07 21:49
だから、ここJava会議室だってば・・・
| ||||
|
投稿日時: 2006-02-07 22:10
こんばんは。
#VC++の質問なら「Insider.NET」会議室に投稿されるほうがよろしいと思いますよ。 マウスポインタがボタン上にあるかどうかは、DRAWITEMSTRUCT構造体のitemStateメンバでは判断できません。 なので、ご自身でマウスポインタがボタン上にあるか判断する必要があります。 判断する方法を2通りあげておきます。 方法1.WM_MOUSEHOVER,WM_MOUSELEAVEメッセージを拾い、マウスポインタがボタン上にあるか離れたかを判断します。 方法2.WM_MOUSEMOVEメッセージハンドラでマウスがボタン上にあることを判断する。このときタイマーをセットし 定期的に(例えば10ms毎に)マウスポインタがボタン上にあるか、それとも離れたかをチェックします。 離れた場合はタイマーを解除します。 方法1.は古いバージョンのWindowsで動かない可能性があるので、私は方法2.を使うことが多いです。 | ||||
|
投稿日時: 2006-02-08 00:53
void COctButton:nMouseMove(UINT nFlags, CPoint point)
{ if(条件){ m_iMouseFlug=123; COctButton:rawItem();//コンパイルerrorになります! } } 上記のIFから、DrawItem()を呼出し、m_iMouseFlug=123;の条件でオーナ描画したいのですが 呼び出せません。 コンパイルerrorになってしまいました。 DrawItem()を呼び出す方法をお願いします! -次回からは「Insider.NET」にします− [ メッセージ編集済み 編集者: 砂嵐ジバ 編集日時 2006-02-08 00:56 ] | ||||
|
投稿日時: 2006-02-08 02:45
「オーナ描画ボタン上にマウスカーソルを置くと新たなブラシで描画」させる方法とコンパイルエラーではずいぶんと焦点が違うと思うので別スレッドにしてはいかがでしょうか(Insider .NETで)?
質問内容に見合ったタイトルを付けることでレスポンスがつきやすくなると思いますよ。 もちろんわからないときは何がわからないかもわからず、どう質問すればよいか、どんなタイトルだと良いのかすらはっきりしないこともあると思います。そんなときに質問するのをためらうことはないですが。 #分かっている人が見るからこそ「タイトルと質問内容がちがうんじゃないの?」と感じることも・・? あと、自己解決してもフィードバックしない↓とか、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27949&forum=12 レスポンスが来てもスルーしまくり↓とか、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27119&forum=7 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28000&forum=12 もったいないですね。せっかくのコミュニティですから還元する姿勢も大事だと個人的には思っています。 [ メッセージ編集済み 編集者: インギ 編集日時 2006-02-08 04:40 ] | ||||
|
投稿日時: 2006-02-08 19:16
こんばんは。
OnMouseMoveイベントハンドラから直接DrawItem()を呼び出すのではなく、 RedrawWindow()など描画更新関数を呼び出して、間接的にDrawItem()が呼び出されるようにすれば良いでしょう。 |
1