LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//消息分为入队消息,不入队列消息
//不进队列消息,不进入getmessage
//wparam:按键的状态值
//lparam:鼠标状态
//return 0 系统都会给你处理一遍
//return 1 告诉系统,哥已经处理完了,滚蛋吧
switch (uMsg)
{
case WM_PAINT://画图
{
//开启绘图
PAINTSTRUCT paint;
HDC hdc = BeginPaint(hwnd, &paint);
//绘图
Rectangle(hdc, 20, 20, 80, 80);
wchar_t wz[255] = {L"你好,大帅比"};
TextOut(hdc,100,100,wz,wcslen(wz));
break;
}
case WM_CHAR:
{
/*wchar_t zfc[255] = { 0 };
wsprintf(zfc, L"字符:%c",(char)wParam);
SetWindowText(hwnd,zfc);
break;*/
}
case WM_SYSKEYDOWN://系统按键
{
//switch (wParam)
//{
//case VK_SHIFT:
// MessageBox(hwnd,L"SHIFT",L"TIP",MB_OK);
// break;
//default:
// break;
//}
}
case WM_KEYDOWN://案件按下
{
//switch (wParam)
//{
//case VK_RETURN:
// MessageBox(hwnd,L"回车键",L"tips",MB_OK);
// break;
//case VK_CONTROL:
// MessageBox(hwnd, L"ctrl键", L"tips", MB_OK);
// break;
//default:
// break;
//}
//break;
}
case WM_MOUSEMOVE://鼠标移动实时显示
{
/*wchar_t text[100] = L"你好,大帅比";
wchar_t text1[100] = { 0 };
int x = LOWORD(lParam);
int y = HIWORD(lParam);
wsprintf(text1, L"x的坐标: %d\t y的坐标: %d", x, y);
if ((wParam & MK_CONTROL))
{
wcscat(text, L"你按下了ctrl键");
}
if ((wParam & MK_SHIFT))
{
wcscat(text, L"你按下了shift键");
}
if ((wParam & MK_LBUTTON))
{
wcscat(text, L"你按下了鼠标左键");
}
if ((wParam & MK_RBUTTON))
{
wcscat(text, L"你按下了鼠标右键");
}
SetWindowText(hwnd, text1);*/
//MessageBox();
break;
}
case WM_LBUTTONDOWN: //鼠标左键按下
{
//wchar_t text[100] = L"你好,大帅比";
//wchar_t text1[100] = {0};
//int x = LOWORD(lParam);
//int y = HIWORD(lParam);
//wsprintf(text1, L"x的坐标: %d\t y的坐标: %d", x, y);
//if ((wParam & MK_CONTROL))
//{
// wcscat(text,L"你按下了ctrl键");
//}
//if ((wParam & MK_SHIFT))
//{
// wcscat(text, L"你按下了shift键");
//}
//if ((wParam & MK_LBUTTON))
//{
// wcscat(text, L"你按下了鼠标左键");
//}
//if ((wParam & MK_RBUTTON))
//{
// wcscat(text, L"你按下了鼠标右键");
//}
//SetWindowText(hwnd,text1);
// //MessageBox();
//break;
}
case WM_CREATE: //窗口客户区创建消息,窗口已经创建好了,只不过还没有显示出来
//MessageBox(hwnd,L"要创建窗口了昂",L"SWEET TIPS",MB_OK);
//SetWindowText(hwnd,L"我是大帅比");
SetTimer(hwnd,TIME_ID,1000,NULL);
break;
case WM_CLOSE://关闭程序
{
if (IDYES == MessageBox(NULL, L"点了关闭按钮", L"提示", MB_OK))
{
DestroyWindow(hwnd);//销毁窗口
break;
}
else
{
DestroyWindow(hwnd);
break;
//ShowWindow(hwnd, SW_MINIMIZE);
//return 0;//告诉系统,哥已经整过了,你不用在处理了
}
break;
}
//在create里开启一个定时器
case WM_TIMER:
{
int timeid = wparam;
switch (timeid)
{
case TIME_ID:
time_t tt;
time(&tt);
tm* t;
t = localtime(&tt);
wchar_t timesz[256];
wsprintf(timesz, L"当前时间:%d年%d月%d日%d时%d分%d秒", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
SetWindowText(hwnd,timesz);
break;
default:
break;
}
break;
}
case WM_DESTROY://窗口销毁消息
PostQuitMessage(0);//发出退出消息 任务管理器进程也没了,不然会一直在
break;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);//操作系统默认处理消息的函数
}
自定义消息:自定义的消息,要在wm_user 以后的编号,这样才是属于用户自定义的消息。
那么如何触发呢?好问题!当然是用sendmessage 和postmessage 来触发啦!
SendMessage(hwnd,WM_TEXT,10,10);
下面是系统定义的消息