您好,登錄后才能下訂單哦!
一、窗口非客戶區的鼠標消息
1.WM_NCMOUSEMOVE 鼠標移動
鼠標左鍵
WM_NCLBUTTONDOWN 按下
WM_NCLBUTTONUP 松開
WM_NCLBUTTONDBLCLK 雙擊
鼠標右鍵
WM_NCRBUTTONDOWN 按下
WM_NCRBUTTONUP 松開
WM_NCRBUTTONDBLCLK 雙擊
鼠標中鍵
WN_NCMBUTTONDOWN 按下
WM_NCMBUTTONUP 松開
WM_NCMBUTTONDBLCLK 雙擊
二.WM_NCHITTEST消息
1.是操作系統發給鼠標下面的窗口,以便確定鼠標是在窗口的哪個部分
上面,所有的窗口鼠標消息產生之前都是要先響應該消息,該消息由默認
窗口消息處理程序處理,返回值提示鼠標所在區域
HTCAPTION 在非客戶區標題欄上
HTCLIENT 客戶區
HTCLOSE 在關閉按鈕上
HTHELP 非客戶區幫助按鈕
HTMAXBUTTON 最大化按鈕
HTMINBUTTON 最小化按鈕
HTTRANSPARENT 鼠標穿過窗口
...
2.滾輪消息 WM_MOUSEWHEEL
它表示鼠標被滾動的消息,這個消息不限于客戶區,也不限于非客戶區
WPARAM參數 低16位表示哪個鍵被按下, 高16位表示滾動的距離
正值表示向前滾動,負值向后滾動.
LPARAM參數 低16客戶區X坐標 高16位客戶區Y坐標
三.SetWindowPos函數
1.改變窗口的位置,大小和Z-Order.并且可以設置窗口的顯示狀態
HWND hWnd 要改變位置,大小,或Z-Order的窗口
HWND hWndInsertAfter 窗口句柄 hWnd在Z-Order上將被置于他后面
int x,int y 窗口的位置
int cx,int cy 窗口大小
UINT uFlags操作標準
成功返回TRUE 失敗返回FALSE
uFlags參數
SWP_NOSIZE 維持當前窗口大小.就是忽略cx和cy參數
SWP_NOMOVE 維持當前窗口的位置,也就是忽略X和Y參數
SWP_NOZORDER 不改變窗口Z-Order次序
SWP_NOOWNERZORDER 不改變Z序中所有者窗口位置
SWP_NOREDRAW 不重繪窗口
SWP_NOSENDCHANGING 不發送窗口位置改變消息
SWP_FRAMECHANGED 強制窗口標題欄以及邊框重繪,即發送WM_NCPAINT消息
SWP_HIDEWINDOW 隱藏窗口
SWP_SHOWWINDOW 顯示窗口
SWP_NOACTIVATE 不激活窗口
四.多個窗口同步移動的方法
BeginDeferWindowPos 返回用于存儲多窗口位置和大小信息的句柄HWND
DeferWindowPos函數把指定窗口的新位置大小信息存儲在句柄HDWP中
EndDeferWindowPos最好調用EndDeferWindowPos來同時更新之前存儲好的多窗口位置大小
HDWP BeginDeferWindowPos(
int nNumWindos 村粗幾個窗口的位置大小信息
) 返回值為多窗口的位置跟大小信息
DeferWindowPos(
HDWP hWinPosInfo,BeginDeferWindowPos返回的多窗口位置跟大小信息句柄
HWND hWnd, 要改變位置或大小信息的窗口
HWND hWndInsertAfter,
int x,int y, 窗口位置
int cx,int cy,窗口大小
UINT uFlags, //跟SetWindowPos的uFlags參數一樣
)
EndDeferWindowPos(
HDWP hWinPosInfo eginDeferWindowPos返回的多窗口位置跟大小信息句柄
)
函數返回TRUE 成功,FALSE失敗
五、菜單函數
1.HMENU WINAPI CreateMenu(VOID)
HMENU WINAPI CreatePopupMenu(VOID)
2.這兩函數都返回了創建后的菜單的句柄.這兩個函數的區別:
CreateMenu是創建水平菜單,通常是放置在頂級窗口中,
同時也是作為頂級菜單的,就行我們經常看到的"文件"
編輯,等菜單
6CreatePopupMenu創建的是一個垂直的彈出菜單,
經常被用來做另一個菜單的子菜單或者右鍵菜單
3.銷毀菜單的函數 BOOL WINAPI DestoryMenu(HMENU hMenu)
4.添加菜單項
BOOL WINAPI AppendMenu(
HMENU hMenu, //要修改的菜單
UINT uFlag, //新菜單選項的狀態信息,
MF_STRING 新建一個字符串菜單選項
MF_BITMAP 新建一個位圖菜單選項
MF_POPUP 新選項為一個彈出式菜單
MF_CHECKED 新選項為一個已選中的菜單選項,即菜單選項前面有一個打鉤
MF_DISABLED 新建一無法選中的菜單項,但外觀不變灰
MF_GRAYED 新菜單選項無效,用戶無法選中該選項, 且外觀變灰
UINT_PTR uIDNewItem, //新菜單選項的命令ID
LPCWSTR lpNewItem //新菜單選項的內容,
如果是MF_BITMAP 則為位圖的句柄,否則為顯示在菜單項上的內容.
)
5.設置菜單項的前面是否要打鉤
DWORD CheckMenuItem(
HMENU hMenu, //要設置的菜單句柄
UINT uIDCheckItem, 要設置的菜單項
要么是菜單的ID,要么是索引值,值類型取決于 uCheck
UINT uCheck
MF_BYCOMMAND 指明使用菜單項的ID
MF_BYPOSITION 指明菜單項使用索引值
MF_CHECKED: 為菜單添加打鉤標志
MF_UNCHECKED 去除打鉤標志
6.禁用一個菜單項
BOOL EnableMenuItem
參數1 hMenu 菜單句柄
參數2 和上面一樣
參數3
MF_BYCOMMAND 指明使用菜單項的ID
MF_BYPOSITION 指明菜單項使用索引值
MF_DISABLED 設置菜單項禁用 但不變灰
MF_ENABLED 設置菜單項啟用
MF_GRAYED 設置菜單項禁用,選項變灰
7.在指定位置顯示一個彈出菜單
BOOL TrackPopupMenu
參數1 菜單句柄
參數2 uFlags 菜單屬性
int x,int y,屏幕坐標系,菜單的左上角坐標
int nReserved,保留著 為0即可
HWND hWnd 此窗口接收菜單的消息
函數返回前,此窗口不接收菜單的WM_COMMAND消息
CONST RECT*prcRect 保留值 NULL即可
uFlag參數屬性:
設置菜單的水平方向的定位
TPM_CENTERALIGN: 彈出的菜單中心位置與參數x對齊
TPM_LEFTALIGN: 彈出的菜單左邊界位置與參數x對齊
TPM_RIGHTALIGN: 彈出的菜單右邊界位置與參數x對齊
設置菜單的垂直方向定位
TPM_BOTTOMALIGN: 彈出的菜單底邊界與參數y對齊
TPM_TOPALIGN: 彈出的菜單頂邊界位置與參數y對齊
TPM_VCENTERALIGN: 彈出的菜單中心位置與參數y對齊
設置菜單是否向窗口發送消息
TPM_NONOTIFY 用戶選擇菜單項后 不發送消息給窗口
TPM_RETURNCMD 用戶選擇菜單后,直接把菜單項的ID返回到返回值里
設置用戶要鼠標的哪個鍵來選擇菜單
TPM_LEFTBUTTON 鼠標左鍵
TPM_RIGHTBUTTON 鼠標右鍵
六、廣播消息
1.SendMessage 只能發送一個消息給一個窗口
如果要給多個窗口發送同一個消息的話,就要用到廣播消息
2.把某個消息廣播給指定的接收者,接收者可以是一個應用程序
網絡驅動器,系統級設備驅動器,應用程序的頂級窗口
也能接收到廣播消息,
3.廣播消息的消息值 必須是系統中已經注冊的消息值
所以是不能使用自定義消息的.
4.向Windows注冊消息
UINT RegisterWindowMessage函數
注冊一個新的窗口消息.保證該消息的值在體統范圍內是唯一的
參數 LPCTSTR lpString 被注冊的消息的名字
返回 被注冊的消息值
5.廣播系統已注冊的消息
long BroadcastSystemMessage
(
DWORD flags 選項
BSF_QUERY 每次發送消息給一接收者,只有接收者返回TURE才發送給下一個接受者
BSF_NOHANG 把掛起的應用程序當成超時,有一個接受者超時,就停止廣播
BSF_NOTIMEOUTINFOTHUNG 只要接收者沒掛起,一直等待消息響應,不會出現超時
BSF_FORCEIFHUNG 繼續廣播消息,即使超時或者接受者掛起
BSF_POSTMESSAGE 寄送消息,不等待消息響應,直接返回
BSF_IGNORECURRENTTASK 不發送消息給屬于當前任務的窗口,這樣應用程序就不會接收自己的消息
LPDWORD lpInfo 指向接受者信息的DWORD指針 并可以為下列值組合
BSM_ALLCOMPONENTS 廣播到所有的系統組件
BSM_ALLDESKTOPS 廣播到所有桌面
BSM_APPLICATIONS 廣播到應用程序
UINT Msg 消息ID
WPARAM wParam消息參數
LPARAM 消息參數
)
七、動態的將一個窗口嵌入到一個窗口
1.首先這個窗口樣式一開始是Popup,
當你拖動這個窗口到要嵌入的窗口,然后你修改樣式為WM_CHILD
2. 設置父窗口
HWND SetPaert(
參數1 hWndChild 指定的窗口新父窗口的子窗口
參數2 hWndNewParent 新父窗口
返回值 hWndChild之前的父窗口
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。