015 簡易視窗

Post date: 2015/1/27 上午 07:44:43

#include <windows.h> const int ID_MYBUTTON = 60001; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); /* ************************************ * 功能顯示一個視窗 **************************************/ int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcx; // 視窗類 HWND hwnd; // 視窗處理 MSG msg; // 訊息 // 填充視窗類的資料結構 wcx.cbSize = sizeof(wcx);// 結構體的大小 wcx.style = CS_HREDRAW | CS_VREDRAW; // 樣式:大小改變時重繪介面 wcx.lpfnWndProc = WndProc; // 視窗訊息處理函數 wcx.cbClsExtra = 0; // 不使用類記憶體 wcx.cbWndExtra = 0; // 不使用視窗記憶體 wcx.hInstance = hinstance;// 所屬的應用程式實例處理 wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 圖示:使用預設值 wcx.hCursor = LoadCursor(NULL, IDC_ARROW);// 遊標:使用預設值 wcx.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH); // 背景:白色 wcx.lpszMenuName = NULL; // 選單:不使用 wcx.lpszClassName = TEXT("MainWClass");// 視窗類名 wcx.hIconSm = (HICON)LoadImage(hinstance,// 小圖示 MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); // 註冊視窗類 if(!RegisterClassEx(&wcx)) { return 1; } // 建立視窗 hwnd = CreateWindow( TEXT("MainWClass"), // 視窗名 TEXT("Test"), // 視窗標題 WS_OVERLAPPEDWINDOW,// 視窗樣式 100, // 水準位元置X:使用預設值 100, // 垂直位元置Y:使用預設值 640, // 寬度:使用預設值 480, // 高度:使用預設值 (HWND) NULL, // 父視窗:無 (HMENU) NULL, // 選單:使用視窗類的選單 hinstance, // 應用程式實例處理 (LPVOID) NULL); // 視窗建立時資料:無 if (!hwnd) { return 1; } // 顯示視窗 ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // 訊息迴圈 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /* ************************************ * WndProc * 功能視窗訊息處理函數, 對所有的訊息都使用NULL處理函數 **************************************/ LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (Message) { case WM_CREATE: { CreateWindow(TEXT("BUTTON"), TEXT("按鈕1"), WS_CHILD | WS_VISIBLE , 80, 135, 80, 20, hwnd, HMENU(ID_MYBUTTON), ((LPCREATESTRUCT)lParam)->hInstance, NULL); } break; case WM_COMMAND: // 剖析功能表選取項目: switch (LOWORD(wParam)) { case ID_MYBUTTON: { MessageBox(NULL, TEXT("ggg") ,TEXT("Error") , MB_OK); } break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } break; case WM_KEYUP: { switch(wParam) { case VK_ESCAPE: { SendMessage(hwnd, WM_DESTROY, NULL, NULL); } break; } } break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); // TODO: 在此加入任何繪圖程式碼... EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; }