1. 程式人生 > 其它 >第一個 Win32 視窗程式

第一個 Win32 視窗程式

第一個 Win32 視窗程式

程式骨架 int WinMain(){ 
    // 設計視窗外觀及互動響應,註冊,申請專利
    RegisterClass(...) ;
        // 生產視窗 
    CreateWindow(...); 
    // 展示視窗 
    ShowWindow(...); 
    // 粉刷視窗 
    UpdateWindow(...);
    // 進入訊息迴圈 
    while (GetMessage(...));
    { // 訊息轉換 
        TranslateMessage(...); 
        // 訊息分發 
        DispatchMessage(...); 
    }

可以直接執行

#include <stdio.h>
#include <windows.h>

//設計一個視窗類,填入引數
//註冊視窗類
//建立視窗
//顯示以及更新視窗
//迴圈等待訊息
LPCTSTR clsName = "My";
LPCTSTR msgName = "歡迎學習";

//回撥函式
LRESULT CALLBACK MyWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR lpCmdLine, INT nCmdShow)
{
// 	typedef struct tagWNDCLASSA {
// 		UINT      style;
// 		WNDPROC   lpfnWndProc;
// 		int       cbClsExtra;
// 		int       cbWndExtra;
// 		HINSTANCE hInstance;
// 		HICON     hIcon;
// 		HCURSOR   hCursor;
// 		HBRUSH    hbrBackground;
// 		LPCSTR    lpszMenuName;
// 		LPCSTR    lpszClassName;
// 	} WNDCLASSA, * PWNDCLASSA, * NPWNDCLASSA, * LPWNDCLASSA;
	//定義一個視窗物件
    WNDCLASS wndcls{};
	wndcls.cbClsExtra = NULL;
	wndcls.cbWndExtra = NULL;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndcls.hInstance = hInstance;
	//定義互動響應
	wndcls.lpfnWndProc = MyWinProc;
	//定義視窗代號
	wndcls.lpszClassName = clsName;
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW;

	//註冊視窗類
	RegisterClass(&wndcls);
	//建立視窗
	HWND hwnd;
	hwnd = CreateWindow(clsName, msgName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);


	//顯示和重新整理視窗
	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	//訊息迴圈
	MSG msg;
	while (GetMessage(&msg,NULL,NULL,NULL))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
	
}
LRESULT __stdcall MyWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//uMsg訊息型別
	int ret;
	HDC hdc;
	switch (uMsg)
	{
	case WM_CHAR:
		char szChar[20];
		sprintf_s(szChar, "您剛才按下了:%c", wParam);
		MessageBox(hwnd, szChar, "char", NULL);
		break;
	case WM_LBUTTONDOWN:
		MessageBox(hwnd,"檢測滑鼠左鍵按下","msg",NULL);
		break;
	case WM_PAINT:
		PAINTSTRUCT ps;
		hdc = BeginPaint(hwnd, &ps);
		TextOut(hdc, 0, 0, "www.baidu.com", strlen("www.baidu.com"));
		EndPaint(hwnd, &ps);
		MessageBox(hwnd, "重新繪製", "msg", NULL);
		break;
	 case WM_CLOSE:
		 ret = MessageBox(hwnd, "是否真要退出!", "msg", MB_YESNO);
		if(ret == IDYES)
		{
			DestroyWindow(hwnd);
		}
	 break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd,uMsg,wParam,lParam);
	}
	return 0;
}