2.16 win32信息 事件 機制-創建第一個win32程序

事件和信息
事件,例如鼠標的單機 會保存很多數據 這個便是信息
Windows爲了能夠準確的描述這些信息,提供了一個結構體:MSG,該結構體裏面記錄的事件的詳細信息.

typedef struct tagMSG {		
  HWND   hwnd; 		//窗口句柄
  UINT   message; 		///信息類別 下面信息類型
  WPARAM wParam; 		
  LPARAM lParam; 		
  DWORD  time; 		//信息創建時間
  、
  POINT  pt; 		//創建時 鼠標的位置
} MSG, *PMSG; 		

信息與事件的對應關係
image

image

流程
鼠標按下--事件
創建信息-包含鼠標位置 還有類別(左單機 右單機)
將信息放入隊列中 隊列獲取信息 對信息進行處理

image

將dis加工的信息傳遞給操作系統
系統調用窗口過程函數
第一個win32 代碼編寫

點擊查看代碼
// WindowsProject1.cpp : 定義應用程序的入口點。
//

#include "framework.h"
#include "WindowsProject1.h"
#include <Windows.h>
HINSTANCE hAppInstance;

#define MAX_LOADSTRING 100



// 此代碼模塊中包含的函數的前向聲明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProc(
	IN  HWND hwnd,
	IN  UINT uMsg,
	IN  WPARAM wParam,
	IN  LPARAM lParam
)
{
	switch (uMsg)
	{
		//窗口消息						
	case WM_CREATE:
	{
		DbgPrintf("WM_CREATE %d %d\n", wParam, lParam);
		CREATESTRUCT* createst = (CREATESTRUCT*)lParam;
		DbgPrintf("CREATESTRUCT %s\n", createst->lpszClass);

		return 0;
	}
	case WM_MOVE:
	{
		DbgPrintf("WM_MOVE %d %d\n", wParam, lParam);
		POINTS points = MAKEPOINTS(lParam);
		DbgPrintf("X Y %d %d\n", points.x, points.y);

		return 0;
	}
	case WM_SIZE:
	{
		DbgPrintf("WM_SIZE %d %d\n", wParam, lParam);
		int newWidth = (int)(short)LOWORD(lParam);
		int newHeight = (int)(short)HIWORD(lParam);
		DbgPrintf("WM_SIZE %d %d\n", newWidth, newHeight);

		return 0;
	}
	case WM_DESTROY:
	{
		DbgPrintf("WM_DESTROY %d %d\n", wParam, lParam);
		PostQuitMessage(0);

		return 0;
	}
	//鍵盤消息						
	case WM_KEYUP:
	{
		DbgPrintf("WM_KEYUP %d %d\n", wParam, lParam);

		return 0;
	}
	case WM_KEYDOWN:
	{
		DbgPrintf("WM_KEYDOWN %d %d\n", wParam, lParam);

		return 0;
	}
	//鼠標消息						
	case WM_LBUTTONDOWN:
	{
		DbgPrintf("WM_LBUTTONDOWN %d %d\n", wParam, lParam);
		POINTS points = MAKEPOINTS(lParam);
		DbgPrintf("WM_LBUTTONDOWN %d %d\n", points.x, points.y);

		return 0;
	}
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}








int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
	hAppInstance = hInstance;
	LPCWSTR className = (LPCWSTR)"My First Window";
    
    WNDCLASS wndclass = { 0 };
    
    wndclass.hbrBackground = (HBRUSH)COLOR_MENU;
    wndclass.lpfnWndProc = WindowProc;
    wndclass.lpszClassName = className;
    wndclass.hInstance = hInstance;


    RegisterClass(&wndclass);

    // 創建窗口  				
    HWND hwnd = CreateWindow(
        className,
        TEXT("我的第一個窗口"),
        WS_OVERLAPPEDWINDOW,
        10,
        10,
        600,
        300,
        NULL,
        NULL,
        hInstance,
        NULL);

    if (hwnd == NULL)
        return 0;

    // 顯示窗口  			
    ShowWindow(hwnd, SW_SHOW);

	// 更新窗口  
	UpdateWindow(hwnd);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    
    
    
    
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章