MFC點選Dialog窗體可拖動的實現

2022-07-17 10:21:11 字數 1033 閱讀 4273

mfc建立乙個可通過滑鼠點選客戶區拖動視窗位置的方法

通過新增訊息響應函式

afx_msg uint onnchittest(cpoint

point);

新增巨集on_wm_nchittest()

然後, 定義onnchittest的行為即可,

onnchittest的**如下:

uint ctimerdlg::onnchittest(cpoint point)

首先,

發生wm_nchittest訊息的時候, 程式先取得客戶區的視窗矩形, 這裡用到getclientrect方法得到,

由於getclientrect取得的是相對於視窗座標系統, 但onnchittest的引數point卻是相對於螢幕的座標系統,

所以這裡用到了clienttoscreen把取到的客戶區矩形轉成相對於螢幕的座標, 然後用crect類的ptinrect方法判斷point是否落在這個矩形裡面,

如果是, 則返回htcaption(就相當於這次點選是點選標題欄), 所以, 就可以這樣來拖動視窗了. 如果,

onnchittest直接返回htcaption的話, 那麼, 但使用者點選非客戶區的時候, 有些功能會失效, 比如點選系統的關閉按鈕,

試一下就會發現這個按鈕無效了; ok, 如果點選的是非客戶端, 者直接返回cdialog::onnchittest(point),

這就是按預設處理了.

以上的這個方法比較麻煩, 其實可以更簡單一點, 只要先呼叫父類的onnchittest(point), 取得返回值,

在判斷是不是htclient, 如果是, 則返回htcaption, 否則直接返回父類onnchittest(point)的返回值就ok了,

修改後如下:

uint ctimerdlg::onnchittest(cpoint point)

再簡化一下, 就成這樣子:

uint ctimerdlg::onnchittest(cpoint point)

由於想收藏可是一直提示錯誤,就直接**出來了!

**自

滑鼠點選可拖動窗體方法

dllimport user32.dll public static extern int sendmessage intptr hwnd,uint msg,int wparam,int lparam dllimport user32.dll public static extern bool re...

Android設定Dialog點選按鈕也不會關閉

控制dialog是否能夠關閉 param dialog 想要控制的dialog param iscloseable true表示可以關閉 false表示不能關閉 private void setdialogcloseability dialoginte ce dialog,boolean isclo...

初試MFC 基於Dialog程式設計

一 關於全域性變數的設定。1 在stdfx.h裡面定義乙個全域性變數即可,其他地方使用,就可以用extern宣告。在cwinthread裡面有個成員變數mainfram,所以在這裡定義乙個公共成員變數也是可以的。二 關於執行緒 主要有兩種執行緒,乙個是所謂的uithread,乙個是work thre...