アプリ切り替え処理
■WindowsMobileは、同時に複数のアプリが起動できるので、
自分のアプリから違うアプリに移ったり、その逆の場合、データを一時退避したほうがよい場合があります。
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); #define PROC_NAME L"ProcSample08" //---------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreInst, LPWSTR lpszCmdLine, int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS myProg; if (!hPreInst) { myProg.style = CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc = WndProc; myProg.cbClsExtra = 0; myProg.cbWndExtra = 0; myProg.hInstance = hInstance; myProg.hIcon = NULL; myProg.hCursor = NULL; myProg.hbrBackground = (HBRUSH)COLOR_WINDOW; myProg.lpszMenuName = NULL; myProg.lpszClassName = PROC_NAME; if (!RegisterClass( &myProg )){ return FALSE; } } hwnd = CreateWindow( PROC_NAME, L"Sample08", WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); do{ if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } while(msg.message != WM_QUIT); return (int)( msg.wParam ); } //---------------------------------------------------------------- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { HDC hdc; PAINTSTRUCT paintSt; switch (msg) { case WM_KILLFOCUS: // 違うアプリに移った break; case WM_SETFOCUS: // 自分の戻ってきた break; case WM_PAINT: hdc = BeginPaint( hwnd, &paintSt ); EndPaint( hwnd, &paintSt ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return(DefWindowProc( hwnd, msg, wParam, lParam )); } return (0L); }
■WM_KILLFOCUS:
他のアプリに移るときに呼ばれます。
■WM_SETFOCUS:
他のアプリから自分のアプリに移ってきたときに呼ばれます。
このあとにWM_PAINTがよばれるので、他のアプリで画面が違う状態になっている可能性があるので、ここで画面のモードを再設定してください
(たとえばSIPを消すような処理は、再度設定するひつようがあるいます)