窗口的操作SetWindowPos,ModifyStyle,RedrawWindow,ShowWindow
Posted on 2012-10-16 10:31 盛勝 閱讀(2015) 評(píng)論(0) 編輯 收藏 引用SetWindowPos() SetWindowPos(NULL,100,240,0,0,SWP_NOSIZE);
BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。該參數(shù)必須為一個(gè)窗口句柄,或下列值之一:
HWND_BOTTOM:將窗口置于Z序的底部。如果參數(shù)hWnd標(biāo)識(shí)了一個(gè)頂層窗口,則窗口失去頂級(jí)位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST:將窗口置于所有非頂層窗口之上(即在所有頂層窗口之后)。如果窗口已經(jīng)是非頂層窗口則該標(biāo)志不起作用。
HWND_TOP:將窗口置于Z序的頂部。
HWND_TOPMOST:將窗口置于所有非頂層窗口之上。即使窗口未被激活窗口也將保持頂級(jí)位置。
查看該參數(shù)的使用方法,請(qǐng)看說(shuō)明部分。
x:以客戶(hù)坐標(biāo)指定窗口新位置的左邊界。
Y:以客戶(hù)坐標(biāo)指定窗口新位置的頂邊界。
cx:以像素指定窗口的新的寬度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的標(biāo)志。該參數(shù)可以是下列值的組合:
SWP_ASNCWINDOWPOS:如果調(diào)用進(jìn)程不擁有窗口,系統(tǒng)會(huì)向擁有窗口的線(xiàn)程發(fā)出需求。這就防止調(diào)用線(xiàn)程在其他線(xiàn)程處理需求的時(shí)候發(fā)生死鎖。
SWP_DEFERERASE:防止產(chǎn)生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周?chē)?huà)一個(gè)邊框(定義在窗口類(lèi)描述中)。
SWP_FRAMECHANGED:給窗口發(fā)送WM_NCCALCSIZE消息,即使窗口尺寸沒(méi)有改變也會(huì)發(fā)送該消息。如果未指定這個(gè)標(biāo)志,只有在改變了窗口尺寸時(shí)才發(fā)送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隱藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未設(shè)置標(biāo)志,則窗口被激活,并被設(shè)置到其他最高級(jí)窗口或非最高級(jí)組的頂部(根據(jù)參數(shù)hWndlnsertAfter設(shè)置)。
SWP_NOCOPYBITS:清除客戶(hù)區(qū)的所有內(nèi)容。如果未設(shè)置該標(biāo)志,客戶(hù)區(qū)的有效內(nèi)容被保存并且在窗口尺寸更新和重定位后拷貝回客戶(hù)區(qū)。
SWP_NOMOVE:維持當(dāng)前位置(忽略X和Y參數(shù))。
SWP_NOOWNERZORDER:不改變z序中的所有者窗口的位置。
SWP_NOREDRAW:不重畫(huà)改變的內(nèi)容。如果設(shè)置了這個(gè)標(biāo)志,則不發(fā)生任何重畫(huà)動(dòng)作。適用于客戶(hù)區(qū)和非客戶(hù)區(qū)(包括標(biāo)題欄和滾動(dòng)條)和任何由于窗回移動(dòng)而露出的父窗口的所有部分。如果設(shè)置了這個(gè)標(biāo)志,應(yīng)用程序必須明確地使窗口無(wú)效并區(qū)重畫(huà)窗口的任何部分和父窗口需要重畫(huà)的部分。
SWP_NOREPOSITION;與SWP_NOOWNERZORDER標(biāo)志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:維持當(dāng)前尺寸(忽略cx和Cy參數(shù))。
SWP_NOZORDER:維持當(dāng)前Z序(忽略hWndlnsertAfter參數(shù))。
SWP_SHOWWINDOW:顯示窗口。
返回值:如果函數(shù)成功,返回值為非零;如果函數(shù)失敗,返回值為零。若想獲得更多錯(cuò)誤消息,請(qǐng)調(diào)用GetLastError函數(shù)。
BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。該參數(shù)必須為一個(gè)窗口句柄,或下列值之一:
HWND_BOTTOM:將窗口置于Z序的底部。如果參數(shù)hWnd標(biāo)識(shí)了一個(gè)頂層窗口,則窗口失去頂級(jí)位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST:將窗口置于所有非頂層窗口之上(即在所有頂層窗口之后)。如果窗口已經(jīng)是非頂層窗口則該標(biāo)志不起作用。
HWND_TOP:將窗口置于Z序的頂部。
HWND_TOPMOST:將窗口置于所有非頂層窗口之上。即使窗口未被激活窗口也將保持頂級(jí)位置。
查看該參數(shù)的使用方法,請(qǐng)看說(shuō)明部分。
x:以客戶(hù)坐標(biāo)指定窗口新位置的左邊界。
Y:以客戶(hù)坐標(biāo)指定窗口新位置的頂邊界。
cx:以像素指定窗口的新的寬度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的標(biāo)志。該參數(shù)可以是下列值的組合:
SWP_ASNCWINDOWPOS:如果調(diào)用進(jìn)程不擁有窗口,系統(tǒng)會(huì)向擁有窗口的線(xiàn)程發(fā)出需求。這就防止調(diào)用線(xiàn)程在其他線(xiàn)程處理需求的時(shí)候發(fā)生死鎖。
SWP_DEFERERASE:防止產(chǎn)生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周?chē)?huà)一個(gè)邊框(定義在窗口類(lèi)描述中)。
SWP_FRAMECHANGED:給窗口發(fā)送WM_NCCALCSIZE消息,即使窗口尺寸沒(méi)有改變也會(huì)發(fā)送該消息。如果未指定這個(gè)標(biāo)志,只有在改變了窗口尺寸時(shí)才發(fā)送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隱藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未設(shè)置標(biāo)志,則窗口被激活,并被設(shè)置到其他最高級(jí)窗口或非最高級(jí)組的頂部(根據(jù)參數(shù)hWndlnsertAfter設(shè)置)。
SWP_NOCOPYBITS:清除客戶(hù)區(qū)的所有內(nèi)容。如果未設(shè)置該標(biāo)志,客戶(hù)區(qū)的有效內(nèi)容被保存并且在窗口尺寸更新和重定位后拷貝回客戶(hù)區(qū)。
SWP_NOMOVE:維持當(dāng)前位置(忽略X和Y參數(shù))。
SWP_NOOWNERZORDER:不改變z序中的所有者窗口的位置。
SWP_NOREDRAW:不重畫(huà)改變的內(nèi)容。如果設(shè)置了這個(gè)標(biāo)志,則不發(fā)生任何重畫(huà)動(dòng)作。適用于客戶(hù)區(qū)和非客戶(hù)區(qū)(包括標(biāo)題欄和滾動(dòng)條)和任何由于窗回移動(dòng)而露出的父窗口的所有部分。如果設(shè)置了這個(gè)標(biāo)志,應(yīng)用程序必須明確地使窗口無(wú)效并區(qū)重畫(huà)窗口的任何部分和父窗口需要重畫(huà)的部分。
SWP_NOREPOSITION;與SWP_NOOWNERZORDER標(biāo)志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:維持當(dāng)前尺寸(忽略cx和Cy參數(shù))。
SWP_NOZORDER:維持當(dāng)前Z序(忽略hWndlnsertAfter參數(shù))。
SWP_SHOWWINDOW:顯示窗口。
返回值:如果函數(shù)成功,返回值為非零;如果函數(shù)失敗,返回值為零。若想獲得更多錯(cuò)誤消息,請(qǐng)調(diào)用GetLastError函數(shù)。
ShowWindow() ShowWindow(SW_HIDE)
BOOL ShowWindow(HWND hWnd,int nCmdShow );
hWnd:指窗口句柄。
nCmdShow:指定窗口如何顯示。如果發(fā)送應(yīng)用程序的程序提供了STARTUPINFO結(jié)構(gòu),則應(yīng)用程序第一次調(diào)用ShowWindow時(shí)該參數(shù)被忽略。否則,在第一次調(diào)用ShowWindow函數(shù)時(shí),該值應(yīng)為在函數(shù)WinMain中nCmdShow參數(shù)。在隨后的調(diào)用中,該參數(shù)可以為下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使擁有窗口的線(xiàn)程被掛起也會(huì)最小化。在從其他線(xiàn)程最小化窗口時(shí)才使用這個(gè)參數(shù)。
SW_HIDE:隱藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一個(gè)頂層窗口。
SW_RESTORE:激活并顯示窗口。如果窗口最小化或最大化,則系統(tǒng)將窗口恢復(fù)到原來(lái)的尺寸和位置。在恢復(fù)最小化窗口時(shí),應(yīng)用程序應(yīng)該指定這個(gè)標(biāo)志。
SW_SHOW:在窗口原來(lái)的位置以原來(lái)的尺寸激活和顯示窗口。
SW_SHOWDEFAULT:依據(jù)在STARTUPINFO結(jié)構(gòu)中指定的SW_FLAG標(biāo)志設(shè)定顯示狀態(tài),STARTUPINFO 結(jié)構(gòu)是由啟動(dòng)應(yīng)用程序的程序傳遞給CreateProcess函數(shù)的。
SW_SHOWMAXIMIZED:激活窗口并將其最大化。
SW_SHOWMINIMIZED:激活窗口并將其最小化。
SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然維持激活狀態(tài)。
SW_SHOWNA:以窗口原來(lái)的狀態(tài)顯示窗口。激活窗口仍然維持激活狀態(tài)。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和狀態(tài)顯示窗口。激活窗口仍然維持激活狀態(tài)。
SW_SHOWNORMAL:激活并顯示一個(gè)窗口。如果窗口被最小化或最大化,系統(tǒng)將其恢復(fù)到原來(lái)的尺寸和大小。應(yīng)用程序在第一次顯示窗口的時(shí)候應(yīng)該指定此標(biāo)志。
BOOL ShowWindow(HWND hWnd,int nCmdShow );
hWnd:指窗口句柄。
nCmdShow:指定窗口如何顯示。如果發(fā)送應(yīng)用程序的程序提供了STARTUPINFO結(jié)構(gòu),則應(yīng)用程序第一次調(diào)用ShowWindow時(shí)該參數(shù)被忽略。否則,在第一次調(diào)用ShowWindow函數(shù)時(shí),該值應(yīng)為在函數(shù)WinMain中nCmdShow參數(shù)。在隨后的調(diào)用中,該參數(shù)可以為下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使擁有窗口的線(xiàn)程被掛起也會(huì)最小化。在從其他線(xiàn)程最小化窗口時(shí)才使用這個(gè)參數(shù)。
SW_HIDE:隱藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一個(gè)頂層窗口。
SW_RESTORE:激活并顯示窗口。如果窗口最小化或最大化,則系統(tǒng)將窗口恢復(fù)到原來(lái)的尺寸和位置。在恢復(fù)最小化窗口時(shí),應(yīng)用程序應(yīng)該指定這個(gè)標(biāo)志。
SW_SHOW:在窗口原來(lái)的位置以原來(lái)的尺寸激活和顯示窗口。
SW_SHOWDEFAULT:依據(jù)在STARTUPINFO結(jié)構(gòu)中指定的SW_FLAG標(biāo)志設(shè)定顯示狀態(tài),STARTUPINFO 結(jié)構(gòu)是由啟動(dòng)應(yīng)用程序的程序傳遞給CreateProcess函數(shù)的。
SW_SHOWMAXIMIZED:激活窗口并將其最大化。
SW_SHOWMINIMIZED:激活窗口并將其最小化。
SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然維持激活狀態(tài)。
SW_SHOWNA:以窗口原來(lái)的狀態(tài)顯示窗口。激活窗口仍然維持激活狀態(tài)。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和狀態(tài)顯示窗口。激活窗口仍然維持激活狀態(tài)。
SW_SHOWNORMAL:激活并顯示一個(gè)窗口。如果窗口被最小化或最大化,系統(tǒng)將其恢復(fù)到原來(lái)的尺寸和大小。應(yīng)用程序在第一次顯示窗口的時(shí)候應(yīng)該指定此標(biāo)志。
Create() Create(IDD_DIALOG_ZOOM,NULL);
ModifyStyle() ModifyStyle(0,WS_SIZEBOX);
BOOL ModifyStyle(DWORD dwRemove,DWORD dwAdd,UINT nFlags=0);
參數(shù)含義:
dwRemove 指定修改時(shí)要?jiǎng)h除的窗風(fēng)格。
dwAdd 指定修改時(shí)將要增加的窗口風(fēng)格。
nFlags 該參數(shù)將被傳給SetWindowPos,否則為0,如果SetWindowPos不被調(diào)用的話(huà),一般該參數(shù)默認(rèn)值
返回值:
如果該函數(shù)成功調(diào)用返回一個(gè)非0值,否則返回0;
備注
如果nFlags不為0, ModifyStyle將調(diào)用Windows API 函數(shù)SetWindowPos并且結(jié)合nFlags和以下四個(gè)預(yù)先布置好的標(biāo)志重畫(huà)該窗口。
SWP_NOSIZE 保持當(dāng)前大小。
SWP_NOMOVE 保持當(dāng)前位置.。
SWP_NOZORDER 保持當(dāng)前的Z次序。
SWP_NOACTIVATE 不激活該窗口。
用法:
1、修改控件的原有屬性用 ModifyStyle(1,WS_DISABLED);(實(shí)際測(cè)試時(shí)只要是>=0的整形數(shù)就行)
2、改回來(lái)的話(huà)要用ModifyStyle(WS_DISABLED,1);(實(shí)際測(cè)試時(shí)只要是>=0的整形數(shù)就行)
如果把參數(shù)想像成布爾值的話(huà)就使用1這個(gè)整形數(shù),要除去第控件的屬性就讓第一個(gè)參數(shù)dwRemove為真,修改回來(lái)就讓第二個(gè)參數(shù)dwAdd為真.
BOOL ModifyStyle(DWORD dwRemove,DWORD dwAdd,UINT nFlags=0);
參數(shù)含義:
dwRemove 指定修改時(shí)要?jiǎng)h除的窗風(fēng)格。
dwAdd 指定修改時(shí)將要增加的窗口風(fēng)格。
nFlags 該參數(shù)將被傳給SetWindowPos,否則為0,如果SetWindowPos不被調(diào)用的話(huà),一般該參數(shù)默認(rèn)值
返回值:
如果該函數(shù)成功調(diào)用返回一個(gè)非0值,否則返回0;
備注
如果nFlags不為0, ModifyStyle將調(diào)用Windows API 函數(shù)SetWindowPos并且結(jié)合nFlags和以下四個(gè)預(yù)先布置好的標(biāo)志重畫(huà)該窗口。
SWP_NOSIZE 保持當(dāng)前大小。
SWP_NOMOVE 保持當(dāng)前位置.。
SWP_NOZORDER 保持當(dāng)前的Z次序。
SWP_NOACTIVATE 不激活該窗口。
用法:
1、修改控件的原有屬性用 ModifyStyle(1,WS_DISABLED);(實(shí)際測(cè)試時(shí)只要是>=0的整形數(shù)就行)
2、改回來(lái)的話(huà)要用ModifyStyle(WS_DISABLED,1);(實(shí)際測(cè)試時(shí)只要是>=0的整形數(shù)就行)
如果把參數(shù)想像成布爾值的話(huà)就使用1這個(gè)整形數(shù),要除去第控件的屬性就讓第一個(gè)參數(shù)dwRemove為真,修改回來(lái)就讓第二個(gè)參數(shù)dwAdd為真.
RedrawWindow()
CWindow myWindow;
myWindow.Attach(hWnd);
BOOL bRedrawn = myWindow.RedrawWindow();
CWindow myWindow;
myWindow.Attach(hWnd);
BOOL bRedrawn = myWindow.RedrawWindow();
BOOL RedrawWindow( LPCRECT lpRectUpdate = NULL, HRGN hRgnUpdate = NULL, UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE ); throw() |