首页 > 程序开发 > 软件开发 > 其他 >

窗口过程 处理点击鼠标左右键的消息(带注释)

2017-04-21

窗口过程 处理点击鼠标左右键的消息(带注释):当鼠标左键在窗口客户区被点击时,提示“按击来自主人的食指”,当鼠标右键在窗口客户区被点击时。

窗口过程 处理点击鼠标左右键的消息(带注释):当鼠标左键在窗口客户区被点击时,提示“按击来自主人的食指”,当鼠标右键在窗口客户区被点击时,提示“感受到主人中指的力度。Windows 的窗口总是基于窗口类来创建的,窗口类同时确定了处理窗口消息的窗口过程(回调函数)。

在创建应用程序窗口之前,必须调用 RegisterClass 函数来注册窗口类。该函数只需要一个参数,

即指向 WNDCLASS 窗口类的指针。因为 WNDCLASS 类包含了窗口所拥有的基本属性。*/

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT("MyWindows");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW; //指定窗口类型,各种“类风格”,可以使用按位或操作符组合起来

//CS_VREDRAW 移动或者调整窗口的高度(垂直方向)时,重绘整个窗口

//CS_HREDRAW 移动或者调整窗口的宽度(水平方向)时,重绘整个窗口

wndclass.lpfnWndProc = WndProc; //指定窗口过程(必须是回调函数)

wndclass.cbClsExtra = 0; //预留的额外空间,一般为 0

wndclass.cbWndExtra = 0; //预留的额外空间,一般为 0

wndclass.hInstance = hInstance; //应用程序的实例句柄

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //为所有基于该窗口类的窗口设定一个图标

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //为所有基于该窗口类的窗口设定一个鼠标指针

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);// 指定窗口背景色

wndclass.lpszMenuName = NULL; //指定窗口菜单

wndclass.lpszClassName = szAppName; //指定窗口类名

if (!RegisterClass(&wndclass)) //RegisterClass注册窗口类

{

MessageBox(NULL, TEXT("这个程序需要在Windows NT 才能执行!"), szAppName, MB_ICONERROR);

return 0;

}

/*CreateWindow 函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的

初始位置及大小(可选的)。函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。

若要使用除 CreateWindow 函数支持的风格外的扩展风格,则使用 CreateWindowEx 函数代替 CreateWindow 函数。*/

/*HWND WINAPI CreateWindow(

_In_opt_ LPCTSTR lpClassName, // 窗口类名称

_In_opt_ LPCTSTR lpWindowName, // 窗口标题

_In_ DWORD dwStyle, // 窗口风格,或称窗口格式

_In_ int x, // 初始 x 坐标

_In_ int y, // 初始 y 坐标

_In_ int nWidth, // 初始 x 方向尺寸

_In_ int nHeight, // 初始 y 方向尺寸

_In_opt_ HWND hWndParent, // 父窗口句柄

_In_opt_ HMENU hMenu, // 窗口菜单句柄

_In_opt_ HINSTANCE hInstance, // 程序实例句柄

_In_opt_ LPVOID lpParam // 创建参数

);*/

hwnd = CreateWindow(szAppName, // 窗口类名称

TEXT("酷酷的糖"), // 窗口标题

WS_OVERLAPPEDWINDOW, // 窗口风格,或称窗口格式

//WS_OVERLAPPEDWINDOW相当于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)

CW_USEDEFAULT, // 初始 x 坐标

CW_USEDEFAULT, // 初始 y 坐标

CW_USEDEFAULT, // 初始 x 方向尺寸

CW_USEDEFAULT, // 初始 y 方向尺寸

NULL, // 父窗口句柄

NULL, // 窗口菜单句柄

hInstance, // 程序实例句柄

NULL); // 创建参数

ShowWindow(hwnd, iCmdShow); //显示窗口

UpdateWindow(hwnd); //更新窗口

/*BOOL WINAPI GetMessage(

_Out_ LPMSG lpMsg,

_In_opt_ HWND hWnd,

_In_ UINT wMsgFilterMin,

_In_ UINT wMsgFilterMax

);*/

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

RECT rect;

switch (message)

{

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rect);

DrawText(hdc, TEXT("大家好,我是xxx!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER);

EndPaint(hwnd, &ps);

return 0;

case WM_LBUTTONDOWN:

MessageBox(NULL, TEXT("按击来自主人的食指"), TEXT("好舒服!"), MB_OK);

return 0;

case WM_RBUTTONDOWN:

MessageBox(NULL, TEXT("感受到主人中指的力度"), TEXT("好舒服!"), MB_OK);

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hwnd, message, wParam, lParam);

}

相关文章
最新文章
热点推荐