いつもお世話になっております。
WinXP,SDKです。
WM_LBUTTONDOWN時に、別なウィンドウへ移動メッセージを出しています。
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
ただ、受け取り側のウィンドウでは
WM_EXITSIZEMOVE時にのみ処理を行っています。
マウスを左クリックし、押したままの状態で移動した時はWM_EXITSIZEMOVEが有効ですが、マウスを左クリックしてすぐに離した時はWM_EXITSIZEMOVEメッセージは来ない為に結果がおかしくなります。
左クリック後にすぐに離した時は
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
このメッセージは送らないようにしたいのですが、どのようなタイミングでどうチェックすれば良いでしょうか?
ウィンドウの移動をさせたいので、どうしても左クリックと同時に移動メッセージは出したいのです。
でも、まったく移動されずにマウスを離された時に困ります。
WM_MOSEMOVE時にMK_LBUTTONをチェックして処理をしてみましたが結果は一緒でした。
移動開始の左クリックなのか、シングルクリックなのかが分かればいいような気がするのですが、それもどのように知ることが出来るか分かりません。
アドバイスをお願い致します。
No.1ベストアンサー
- 回答日時:
こんばんは。
どうやら、色々バグがある様です。
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
はそのままで、WM_EXITSIZEMOVEと同時にWM_SETCURSORも追加して見て下さい。
//移動ウィンドウのプロシージャ
LRESULT CALLBACK WndProcMove(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
POINT pt = {0};
RECT rc = {0};
switch(uMsg)
{
case WM_SETCURSOR://クリックだけで離されると此れが送られる(ココを追加)
case WM_EXITSIZEMOVE://移動されて話されると此れが送られる
//アプリウィンドウの外側に居るので浮揚する
if(!::IsMouseIn(s_data.hWndApp))
{
::TransformWindow(s_data.ftb.hWndFloat, s_data.ftb.hWndMove, WS_OVERLAPPEDWINDOW, WS_EX_TOOLWINDOW);
}
else//アプリウィンドウの内側に居るので着地する
{
//着地点を決める
pt = GetLandWindowPointHelper(&s_data);
::TransformWindow(s_data.ftb.hWndLand, s_data.ftb.hWndMove, WS_BORDER, 0, &pt);
}
break;
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
前回のアドバイスも本当にありがとうございました。
使わせて頂いています。
WM_SETCURSOR を追加したところ、ツールバーが後に行ってしまう事がなくなりました!
助かりました。
いつもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マウス・キーボード マウスのないパソコン 9 2022/03/30 10:53
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- Windows 10 Windows10の不具合(Critical Process Died) 9 2022/04/19 21:11
- Excel(エクセル) Excelで図の書式設定を移動したい 1 2022/10/07 15:32
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
- iOS Gragebandでのみ左クリックが有効にならない 1 2022/08/19 13:18
- デスクトップパソコン パソコンの画面が固まった感じになり マウスの矢印を持って行って左クリックしても固まりに変化が起きない 2 2022/07/20 19:46
- ノートパソコン パソコンのマウスについて 今日仕事している時に、猫がノートパソコンの上に乗ってしまい、それ以降マウス 10 2022/11/22 19:22
- その他(ブラウザ) Microsoft edgeのスクロールバーについて 2 2022/09/19 16:56
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WM_NCLBUTTONUPについて
-
msgboxの表示位置
-
vbaから他のアプリを終了
-
SetWindowText関数について
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
windows終了時のメッセージにつ...
-
メッセージハンドラ
-
PeekMessage
-
ウインドウの位置を知る。
-
WM_CTLCOLORDLG
-
VB.netでFindWindowExやると・...
-
VBA 複数セルが空白なら印刷さ...
-
Excel VBA で外部アプリケーシ...
-
マウスの左クリックの内容を知...
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
-
Excel 2019 [オプション]の[リボンのユ...
-
「アイテムは収集されました」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
msgboxの表示位置
-
メッセージボックスの選択ボタ...
-
VBAでコントロールのハンドルを...
-
メッセージハンドラ
-
SetWindowText関数について
-
VB.netでFindWindowExやると・...
-
CloseHandle()
-
SendMessage で ESC など
-
VBA 複数セルが空白なら印刷さ...
-
デスクトップ上のアイコンの位...
-
点滅で知らせる方法
-
システム例外のメッセージを変...
-
WM_NCLBUTTONUPについて
-
Excel VBA で外部アプリケーシ...
-
ElseIfの使い方。
-
VB6でシャットダウン、ログオフ...
-
VB.netでSendMessageを使用して...
-
WM_CTLCOLORDLG
おすすめ情報