typedef struct {
int height;
int width;
} DISPLAYSIZE;
static DISPLAYSIZE ds;
/*******************************************************************/
/* ウィンドウプロシージャ */
/*******************************************************************/
LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ){
switch( nMsg ){
case WM_CREATE:
getDisplaySize();
DisplayModeFull();
SetWindowLong( hWnd, GWL_STYLE, WS_POPUP );
SetWindowPos( hWnd, HWND_TOP, 0, 0, 640, 480, SWP_SHOWWINDOW );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ){
case IDC_QUIT:
DisplayModeNormal();
SendMessage( hWnd, WM_CLOSE, 0L, 0L );
break;
}
break;
case WM_RBUTTONDOWN:
createPopupMenu( hWnd, lParam );
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, nMsg, wParam, lParam );
}
return 0L;
}
/*******************************************************************/
/* ポップアップメニュー */
/*******************************************************************/
static int createPopupMenu( HWND hWnd, LPARAM lParam ){
HINSTANCE hInst;
HMENU hMenu;
HMENU hSubMenu;
POINT pt;
pt.x = LOWORD( lParam );
pt.y = HIWORD( lParam );
hInst = ( HINSTANCE )GetWindowLong( hWnd, GWL_HINSTANCE );
hMenu = LoadMenu( hInst, MAKEINTRESOURCE( IDM_MAINMENU ) );
hSubMenu = GetSubMenu( hMenu, 0 );
ClientToScreen( hWnd, &pt );
TrackPopupMenu( hSubMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL );
DestroyMenu( hMenu );
return TRUE;
}
/*******************************************************************/
/* 画面のサイズを記憶しておく */
/*******************************************************************/
static int getDisplaySize(void){
HWND hDisplayWnd;
RECT DisplayRect;
hDisplayWnd = GetDesktopWindow();
GetWindowRect( hDisplayWnd, (LPRECT)&DisplayRect );
ds.width = DisplayRect.right;
ds.height = DisplayRect.bottom;
return TRUE;
}
/*******************************************************************/
/* フルスクリーンモード */
/*******************************************************************/
static bool DisplayModeFull(void){
DEVMODE screen_mode;
memset( &screen_mode, 0, sizeof( DEVMODE ) );
screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = 640;
screen_mode.dmPelsHeight = 480;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}
return false;
}
/*******************************************************************/
/* 終了時にもとの画面に戻す */
/*******************************************************************/
static bool DisplayModeNormal(void){
DEVMODE screen_mode;
memset( &screen_mode, 0, sizeof( DEVMODE ) );
screen_mode.dmSize = sizeof( DEVMODE );
screen_mode.dmPelsWidth = ds.width;
screen_mode.dmPelsHeight = ds.height;
screen_mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if( ChangeDisplaySettings( &screen_mode, 0 ) == DISP_CHANGE_SUCCESSFUL ){
return true;
}
return false;
}
お礼
回答ありがとうございます。 返事遅れてすみません。 最近、教えて!gooは、混んでますね(^^; どうも、何度もご丁寧にありがとうございます。 バッチリ分かりました。 うまくいきそうです。 ありがとうございました。