from:http://blog.csdn.net/leolee82/article/details/6992615
windows編程 全屏視窗的建立總結
第一種:較簡單的方法
在ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);前加如下代碼:
[cpp]
view plain
copy
print
?
- LONG style = GetWindowLong(hwnd,GWL_STYLE);//獲得視窗風格
- style = &~WS_CAPTION & ~WS_SIZEBOX;//視窗全螢幕顯示且不可改變大小
- SetWindowLong(hwnd,GWL_STYLE,style); //設定視窗風格
- int screenX = GetSystemMetrics(SM_CXSCREEN);//擷取整個螢幕右下角X座標
- int screenY = GetSystemMetrics(SM_CYSCREEN);//螢幕Y座標
- SetWindowPos(hwnd, NULL,0,0,screenX,screenY,SWP_NOZORDER);//改變視窗位置、尺寸和Z序
- ShowCursor(FALSE);//顯示時隱藏滑鼠
LONG style = GetWindowLong(hwnd,GWL_STYLE);//獲得視窗風格style = &~WS_CAPTION & ~WS_SIZEBOX;//視窗全螢幕顯示且不可改變大小SetWindowLong(hwnd,GWL_STYLE,style); //設定視窗風格int screenX = GetSystemMetrics(SM_CXSCREEN);//擷取整個螢幕右下角X座標int screenY = GetSystemMetrics(SM_CYSCREEN);//螢幕Y座標SetWindowPos(hwnd, NULL,0,0,screenX,screenY,SWP_NOZORDER);//改變視窗位置、尺寸和Z序ShowCursor(FALSE);//顯示時隱藏滑鼠
第二種:在按下esc後實現全屏
[cpp]
view plain
copy
print
?
- switch (message)
- {
- case WM_KEYDOWN:
- switch(wParam)
- {
- case VK_ESCAPE:
- {
- HWND hDesk;
- RECT rc;
- hDesk = GetDesktopWindow();
- GetWindowRect( hDesk, &rc );
- SetWindowLong( hWnd, GWL_STYLE, WS_BORDER );
- SetWindowPos( hWnd, HWND_TOPMOST,0,0, rc.right, rc.bottom,
-
- SWP_SHOWWINDOW);
- }
- break;
- }
- return 0;
- }
switch (message){case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: { HWND hDesk; RECT rc; hDesk = GetDesktopWindow(); GetWindowRect( hDesk, &rc ); SetWindowLong( hWnd, GWL_STYLE, WS_BORDER ); SetWindowPos( hWnd, HWND_TOPMOST,0,0, rc.right, rc.bottom, SWP_SHOWWINDOW); } break; } return 0;}
第三種:在訊息中加入一下代碼
[cpp]
view plain
copy
print
?
- static int cx, cy, cxDib, cyDib;
- hdc=::GetDC(NULL);
- switch (message)
- {
- case WM_CREATE:
- cx = GetDeviceCaps(hdc,HORZRES) +
- GetSystemMetrics(SM_CXBORDER);
- cy = GetDeviceCaps(hdc,VERTRES) +
- GetSystemMetrics(SM_CYBORDER);
- ::ReleaseDC(0,hdc);
-
- //去除標題和邊框
- SetWindowLong(hWnd, GWL_STYLE,
- GetWindowLong(hWnd, GWL_STYLE) &
- (~(WS_CAPTION | WS_BORDER)));
-
- // 置對話方塊為最頂端並擴充到整個螢幕
- ::SetWindowPos(hWnd, HWND_TOPMOST,
- -(GetSystemMetrics(SM_CXBORDER)+1),
- -(GetSystemMetrics(SM_CYBORDER)+1),
- +1,cy+1, SWP_NOZORDER);
- }
static int cx, cy, cxDib, cyDib;hdc=::GetDC(NULL);switch (message){ case WM_CREATE: cx = GetDeviceCaps(hdc,HORZRES) + GetSystemMetrics(SM_CXBORDER); cy = GetDeviceCaps(hdc,VERTRES) + GetSystemMetrics(SM_CYBORDER); ::ReleaseDC(0,hdc);//去除標題和邊框 SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & (~(WS_CAPTION | WS_BORDER)));// 置對話方塊為最頂端並擴充到整個螢幕 ::SetWindowPos(hWnd, HWND_TOPMOST, -(GetSystemMetrics(SM_CXBORDER)+1), -(GetSystemMetrics(SM_CYBORDER)+1), +1,cy+1, SWP_NOZORDER);}
以上幾種方法需要注意的是在註冊視窗類別中的功能表項目,如果不顯示菜單就要把lpszMenuName設為null,否則會在全屏的視窗上顯示菜單。