MoveWindow() SetWindowPos()的差別於接洽。本站提示廣大學習愛好者:(MoveWindow() SetWindowPos()的差別於接洽)文章只能為提供參考,不一定能成為您想要的結果。以下是MoveWindow() SetWindowPos()的差別於接洽正文
敲代碼時,忽然發明有一個配景圖片沒法顯示,百思不得其解,終究發明是MoveWindow() SetWindowPos()這兩個函數的應用欠妥形成的。
這裡把這兩個函數的宿世此生給剖析一下。
先看MoveWindow()函數,用於轉變窗口的地位和尺寸,關於頂層窗口,依照屏幕對齊與左上角,關於子窗口,則對齊與父窗口的左上角。
BOOL MoveWindow( HWND hWnd,int x, int y, int nWidth, int nHeight,BOOL bRepaint = TRUE);
第一個表現窗口句柄;
參數x,y表現窗口的左上角終點;
參數nwidth,nHeight 表現窗口高度和寬度;
最初一個bRepaint表現能否立刻重繪。為true時體系會立刻發送WM_PAINT到窗口法式(會挪用UpdateWindow()函數),為false時不會產生任何類型的重繪操作。
MoveWindow會給窗口發送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE新聞。
接上去看SetWindowPos(),這個函數異樣用來完成窗口挪動操作,只不外功效更多一點。
BOOL SetWindowPos(HWND hWnd,const CWnd* pWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);
第一個參數是窗口句柄;
第二個參數是窗口的Z order,就是有多個窗口時,本窗口顯示的次序,最下面或許最上面,可選參數有HWND_BOTTOM,HWND_NOTOPMOST,HWND_TOP,HWND_TOPMOST.
HWND_BOTTOM:將窗口置於Z序的底部。假如參數hWnd標識了一個頂層窗口,則窗口掉去頂級地位,而且被置在其他窗口的底部。
HWND_NOTOPMOST:將窗口置於一切非頂層窗口之上(即在一切頂層窗口以後)。假如窗口曾經長短頂層窗口則該標記不起感化。
HWND_TOP:將窗口置於Z序的頂部。
HWND_TOPMOST:將窗口置於一切非頂層窗口之上。即便窗口未被激活窗口也將堅持頂級地位。
接上去四個參數是窗口的地位和尺寸。
最初一個參數nFlags是窗口顯示方法的標記,這個參數許多,可以組合應用,具體以下:
SWP_ASNCWINDOWPOS:假如挪用過程不具有窗口,體系會向具有窗口的線程收回需求。這就避免挪用線程在其他線程處置需求的時刻產生逝世鎖。
SWP_DEFERERASE:避免發生WM_SYNCPAINT新聞。
SWP_DRAWFRAME:在窗口四周畫一個邊框(界說在窗口類描寫中)。
SWP_FRAMECHANGED:給窗口發送WM_NCCALCSIZE新聞,即便窗口尺寸沒有轉變也會發送該新聞。假如未指定這個標記,只要在轉變了窗口尺寸時才發送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隱蔽窗口。
SWP_NOACTIVATE:不激活窗口。假如未設置標記,則窗口被激活,並被設置到其他第一流窗口或非第一流組的頂部(依據參數hWndlnsertAfter設置)。
SWP_NOCOPYBITS:消除客戶區的一切內容。假如未設置該標記,客戶區的有用內容被保留而且在窗口尺寸更新和重定位後拷貝回客戶區。
SWP_NOMOVE:保持以後地位(疏忽X和Y參數)。
SWP_NOOWNERZORDER:不轉變z序中的一切者窗口的地位。
SWP_NOREDRAW:不重畫轉變的內容。假如設置了這個標記,則不產生任何重畫舉措。實用於客戶區和非客戶區(包含題目欄和轉動條)和任何因為窗回挪動而顯露的父窗口的一切部門。假如設置了這個標記,運用法式必需明白地使窗口有效偏重畫窗口的任何部門和父窗口須要重畫的部門。
SWP_NOREPOSITION;與SWP_NOOWNERZORDER標記雷同。
SWP_NOSENDCHANGING:避免窗口吸收WM_WINDOWPOSCHANGING新聞。
SWP_NOSIZE:保持以後尺寸(疏忽cx和Cy參數)。
SWP_NOZORDER:保持以後Z序(疏忽hWndlnsertAfter參數)。
SWP_SHOWWINDOW:顯示窗口。
留意事項:
應用SetWindowPos()假如設置了SWP_SHOWWINDOWS或許SWP_HIDEWINDOW,那末窗口將不克不及被挪動和轉變年夜小,我應用時就是設置了SWP_SHOWWINDOW,從而招致不克不及重繪配景。
二者的比擬:
二者都能完成挪動和轉變窗口年夜小。
MoveWindow()功效比擬單一,只能挪動和轉變窗口年夜小,而SetWindowPos()可以設置更多的參數,完成Zorder及顯示方法標記。
MoveWindow()發送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE等新聞到窗口,SetWindowPos()只發送WM_WINDOWPOSCHANGED新聞到窗口。所以說假如須要發送更多新聞時照樣應用MoveWindow()的好。