博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
win32可以自定义消息
阅读量:5977 次
发布时间:2019-06-20

本文共 3213 字,大约阅读时间需要 10 分钟。

#include 
#include
#include
#define CLSNAME "Bigjob1"#define WNDNAME "yanshi"#define REP 1000000#define STATUS_READY 0#define STATUS_WORKING 1#define STATUS_DONE 2#define WM_CALC_DONE (WM_USER+0)#define WM_CALC_ABORTED (WM_USER+1)typedef struct{ HWND hwnd; BOOL bContinue;}PARAMS,*PPARAMS;LRESULT APIENTRY WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ static TCHAR clsname[] = TEXT(CLSNAME); WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WindowProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 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 = clsname ; if(!::RegisterClass(&wndclass)) { MessageBox ( NULL, TEXT ("This program requires Windows NT!"), clsname, MB_ICONERROR) ; return 0 ; } HWND hwnd; hwnd = ::CreateWindow(clsname,TEXT(WNDNAME), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); ::ShowWindow(hwnd,SW_SHOW); ::UpdateWindow(hwnd); MSG msg; while(::GetMessage(&msg,NULL,0,0)){ ::TranslateMessage(&msg); ::DispatchMessage(&msg); } return msg.wParam;}VOID Thread(PVOID pvoid){ double A = 1.0; INT i; LONG lTime; volatile PPARAMS pparams; pparams = (PPARAMS)pvoid; lTime = ::GetCurrentTime(); for(i=0; i
bContinue; i++) A = ::tan(atan(exp(log(sqrt(A*A)))))+1.0; if(i == REP) { lTime = ::GetCurrentTime(); ::SendMessage(pparams->hwnd,WM_CALC_DONE,0,lTime); } else ::SendMessage(pparams->hwnd,WM_CALC_ABORTED,0,0); ::_endthread();}LRESULT APIENTRY WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ static INT iStatus; static LONG lTime; static PARAMS params; static TCHAR * szMessage[] = {TEXT("ready(left mouse button begins)"), TEXT("working(right mouse button ends)"), TEXT("%d repetitions in %d msec")}; HDC hdc; PAINTSTRUCT ps; RECT rect; TCHAR szBuffer[64]; switch(uMsg) { case WM_LBUTTONDOWN: if(iStatus == STATUS_WORKING) { ::MessageBeep(0); return 0; } iStatus = STATUS_WORKING; params.hwnd = hwnd; params.bContinue = TRUE; ::_beginthread(Thread,0,&params); ::InvalidateRect(hwnd,NULL,TRUE); return 0; case WM_RBUTTONDOWN: params.bContinue = FALSE; return 0; case WM_CALC_DONE: lTime =lParam; iStatus = STATUS_DONE; ::InvalidateRect(hwnd,NULL,TRUE); return 0; case WM_CALC_ABORTED: iStatus = STATUS_READY; ::InvalidateRect(hwnd,NULL,TRUE); return 0; case WM_DESTROY: ::PostQuitMessage(0); return 0; case WM_PAINT: hdc = ::BeginPaint(hwnd,&ps); ::GetClientRect(hwnd,&rect); ::wsprintf(szBuffer,szMessage[iStatus],REP,lTime); ::DrawText(hdc,szBuffer,-1,&rect,DT_SINGLELINE| DT_CENTER|DT_VCENTER); ::EndPaint(hwnd,&ps); return 0; } return ::DefWindowProc(hwnd,uMsg,wParam,lParam);}

#define WM_CALC_DONE (WM_USER+0)

#define WM_CALC_ABORTED (WM_USER+1)

这两句已经很明显了,可以自定义消息那改多有趣啊!!

转载地址:http://pvsox.baihongyu.com/

你可能感兴趣的文章
定时发送服务器运行数据并设置阀值警报方法
查看>>
JavaScript时间日期格式转化
查看>>
os:进程与线程问题
查看>>
Java: 数据类型
查看>>
我的友情链接
查看>>
曼彻斯特编码
查看>>
Python OpenCV学习笔记之:使用Grabcut算法进行图像背景和前景分割
查看>>
2月上旬国内域名总量止跌回升 净增长量达8574个
查看>>
static的用法
查看>>
MSSQL 2008 数据库变成可疑状态
查看>>
交叉编译Open***-2.4.3
查看>>
Linux rpm 命令参数使用详解
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
455. Assign Cookies - LeetCode
查看>>
ORA-01940,删除某用户的所有对象
查看>>
责任链模式
查看>>
php常用的十个代码片段,转载
查看>>
iOS程序的启动过程介绍
查看>>
linux 下ab压力测试
查看>>
更新 Ubuntu 系统,避免报错「校验和不符」
查看>>