实现的主要功能如下:
- 程序默认图标为?,默认光标为左右箭头,在指定位置输出 文字消息
- 单击鼠标左键时,弹出对应点的位置坐标(注意坐标转换)
- 单击键盘的上下左右键时,弹出对应的对话框(键盘消息的处理方式)
#include "windows.h"
#include "stdio.h"
LRESULT CALLBACK DealMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT pen;
HDC dc;
TCHAR *PP = L"你好,Windows";
switch (uMsg)
{
//鼠标左键按下
case WM_LBUTTONDOWN:
{
TCHAR buf[1024] = {0};
int x = 10, y = 10;
POINT pt;//CPoint pt;
GetCursorPos(&pt);//该函数检取光标的位置,以屏幕坐标表示, 如果为了与TextOut 相比的话,则需要将屏幕坐标转换为客户区坐标
ScreenToClient(hWnd, &pt);//的将屏幕坐标转换为客户区坐标//TextOut中就是客户区坐标
x = pt.x;
y = pt.y;
wsprintf(buf,TEXT("x = %d , y = %d"),x,y);
MessageBox(hWnd,buf,TEXT("坐标"),MB_OK);
}
break;
//关闭程序
case WM_DESTROY://WM_QUIT//只有发这个命令时,关闭调试程序时,代码上的调试才会结束
PostQuitMessage(2);
break;
case WM_PAINT://输出文字
{
dc = BeginPaint(hWnd,&pen);
TextOutW(dc,20,20,PP,wcslen(PP));//客户区坐标
EndPaint(hWnd,&pen);
break;
}
case WM_KEYDOWN://当有键盘输入事件时,会产生 WM_KEYDOWN 消息
{
switch(wParam)//虚拟键
{
case VK_LEFT:
MessageBox(hWnd,TEXT("向左"),TEXT("坐标"),MB_OK);
break;
case VK_UP:
MessageBox(hWnd,TEXT("向上"),TEXT("坐标"),MB_OK);
break;
case VK_RIGHT:
MessageBox(hWnd,TEXT("向右"),TEXT("坐标"),MB_OK);
break;
case VK_DOWN:
MessageBox(hWnd,TEXT("向下"),TEXT("坐标"),MB_OK);
break;
case VK_RETURN:
MessageBox(hWnd,TEXT("键盘Enter"),TEXT("坐标"),MB_OK);
break;
}
break;
}
default:
return DefWindowProc(hWnd, uMsg,wParam, lParam);
}
return 0;
}
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hWnd;
MSG msg;
WNDCLASS cs;
DWORD dWord;
cs.cbClsExtra = 0;
cs.cbWndExtra = 0;//这个写错了,写成了第一个参数,导致注册类不成功!!!!!
cs.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//画刷北京BLACK_PEN
cs.hCursor = LoadCursor(NULL,IDC_SIZEWE);
cs.hIcon = LoadIcon(NULL,IDI_QUESTION);
cs.hInstance = hInstance;
cs.lpfnWndProc = DealMessage;
cs.lpszClassName = TEXT("ABC");
cs.lpszMenuName = NULL;
cs.style = nShowCmd;
if (!RegisterClass(&cs))//这里可以查看是否注册成功//返回非零是成功,返回零是失败
{
MessageBox(NULL,TEXT("注册类失败,请检查参数是否成功设置"),TEXT("坐标"),MB_OK);
}
hWnd = CreateWindow(TEXT("ABC"), TEXT("hello,windows"), WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, CW_USEDEFAULT,CW_USEDEFAULT
,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL);//CreateWindow中窗口类与 WNDCLASS中窗口类名必须一样才可以,否则也是运行不了
if (!hWnd)
{
return 0;
}
MoveWindow(hWnd,30,30,580,480,TRUE);//相对整个桌面屏幕的左上角。。。测试过
ShowWindow(hWnd,SW_NORMAL);
UpdateWindow(hWnd);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 1;
}