1. #include <windows.h>
  2. #include <strsafe.h>
  3.  
  4. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  5. void DrawRectangle(HWND hwnd);
  6.  
  7. int cxClient, cyClient;
  8.  
  9. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  10. {
  11. //声明全局数据:类名
  12. static TCHAR szClassName[] = TEXT("MyWindows");
  13. HWND hwnd;
  14. MSG msg;
  15.  
  16. //注册窗口类
  17. WNDCLASS wndclass;
  18.  
  19. wndclass.hInstance = hInstance;
  20. wndclass.lpszClassName = szClassName;
  21. wndclass.cbClsExtra = ;
  22. wndclass.cbWndExtra = ;
  23. wndclass.lpfnWndProc = WndProc;
  24. wndclass.lpszMenuName = NULL;
  25. wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  26. wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  27. wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  28. wndclass.style = CS_HREDRAW;
  29.  
  30. if (!RegisterClass(&wndclass))
  31. {
  32. MessageBox(NULL, TEXT("this program must run in Windows NT!"), szClassName, MB_ICONERROR);
  33. return ;
  34. }
  35.  
  36. hwnd = CreateWindow(
  37. szClassName,
  38. TEXT("MyFirstPractice"),
  39. WS_OVERLAPPEDWINDOW,
  40. CW_USEDEFAULT,
  41. CW_USEDEFAULT,
  42. CW_USEDEFAULT,
  43. CW_USEDEFAULT,
  44. NULL,
  45. NULL,
  46. hInstance,
  47. NULL
  48. );
  49.  
  50. ShowWindow(hwnd, nShowCmd);
  51. UpdateWindow(hwnd);
  52.  
  53. // while (GetMessage(&msg, NULL, 0, 0)) 阻塞函数 这个NULL是指接收当前窗口,包括非客户区的信息,如果设为hwnd则(指的是当前客户区)处理非客户区时,不会响应去退出程序,所以会在后台存在 ???
  54. // {
  55. // TranslateMessage(&msg);
  56. // DispatchMessage(&msg);
  57. // }
  58.  
  59. // #define PM_NOREMOVE 0x0000
  60. // #define PM_REMOVE 0x0001
  61. // #define PM_NOYIELD 0x0002
  62. // #if(WINVER >= 0x0500)
  63. // #define PM_QS_INPUT (QS_INPUT << 16)
  64. // #define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
  65. // #define PM_QS_PAINT (QS_PAINT << 16)
  66. // #define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)
  67.  
  68. while (TRUE)
  69. {
  70. if (PeekMessage(&msg,NULL,,,PM_REMOVE))//PM_REMOVE接收后删除 PM_NOREMOVE获取后不删除(偷窥)
  71. {
  72. if (msg.message==WM_QUIT)
  73. {
  74. break;
  75. }
  76. TranslateMessage(&msg);
  77. DispatchMessage(&msg);
  78. }
  79. else
  80. {
  81. //rand() //0~MAX_RAND 0-32767
  82. //绘制矩形,用到消息处理中的数据(全局)
  83. DrawRectangle(hwnd);
  84. }
  85. }
  86.  
  87. return msg.wParam;
  88. }
  89.  
  90. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  91. {
  92. HDC hdc;
  93. PAINTSTRUCT ps;
  94. RECT rect;
  95. // static int cxClient, cyClient; //static是指数据在这个函数中为全局,不是在程序中
  96.  
  97. switch (message)
  98. {
  99. case WM_SIZE:
  100. cxClient = LOWORD(lParam);
  101. cyClient = HIWORD(lParam);
  102. break;
  103. case WM_PAINT:
  104. hdc = BeginPaint(hwnd, &ps);
  105. GetClientRect(hwnd, &rect);
  106.  
  107. EndPaint(hwnd, &ps);
  108. break;
  109. case WM_DESTROY:
  110. PostQuitMessage();
  111. return ;
  112. }
  113.  
  114. return DefWindowProc(hwnd, message, wParam, lParam);
  115. }
  116.  
  117. void DrawRectangle(HWND hwnd)
  118. {
  119. // TCHAR szBuffer[100];
  120. // StringCchPrintf(szBuffer, 100, L"%d %d", cxClient, cyClient);
  121. // MessageBox(NULL, szBuffer, L"Info", NULL);
  122. HBRUSH hBrush;
  123. HDC hdc;
  124. RECT rect;
  125.  
  126. if (cxClient == || cyClient == )
  127. return;
  128. hdc = GetDC(hwnd);
  129. SetRect(&rect, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient);
  130. hBrush = CreateSolidBrush(RGB(rand() % , rand() % , rand() % ));
  131. FillRect(hdc, &rect, hBrush);
  132. DeleteObject(hBrush);
  133. ReleaseDC(hwnd, hdc);
  134. }

学习windows编程 day4 之 绘制随机矩形和peekMessage的更多相关文章

  1. 学习windows编程 day4 之 矩形的操作

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  2. 学习windows编程 day4 之 多边矩形填充

    #include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...

  3. 学习windows编程 day4 之 盯裆猫

    写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...

  4. 学习windows编程 day4 之视口和窗口

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  5. 学习windows编程 day4 之 设置画刷

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  6. 学习windows编程 day4 之 自定义映射

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  7. 学习windows编程 day4 之 映射模式

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  8. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  9. 我为什么学习Windows编程

    前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...

随机推荐

  1. Activiti解析.bpmn文件获得User Task节点的CandidateUsers特性的值

    参考文档: http://www.cnblogs.com/mingforyou/p/5351332.html http://blog.csdn.net/jackyrongvip/article/det ...

  2. mysql 和php 保留2位小数

    一般交易中保留的数字的小数位数为2位(即最小单位为 1分钱[0.01元]) 数据库设计中预金钱有关或要求精准度要高的用 decimal(n,m) 表示,n表示保留的数字长度,保留的小数位数,如deci ...

  3. CSS实现水平居中的5种思路

    前面的话 水平居中是经常遇到的问题.看似方法较多,条条大路通罗马.但系统梳理下,其实都围绕着几个思路展开.本文将介绍关于水平居中的5种思路 text-align [思路一]:在父元素中设置text-a ...

  4. 一本通1609【例 4】Cats Transport

    1609:[例 4]Cats Transport 时间限制: 1000 ms         内存限制: 524288 KB sol:非常偷懒的截图了事 注意:只能猫等人,不能人等猫 对于每只猫,我们 ...

  5. PKUWC 2019&WC 2019爆零记

    PKUWC 2019&WC 2019爆零记 毕竟过了很久了,杂七杂八的东西就不写了,并且除成绩之外的内容不保证其正确性. Day1 T1:看到这道题很舒服啊,枚举top序算合法图的数量,状压D ...

  6. Java常用工具方法

    以GET请求形式获取文本文件内容 /** * 以GET请求形式获取文本文件内容 * @param url http下载地址,比如http://www.abc.com/123.css * @return ...

  7. BZOJ1803Spoj1487 Query on a tree III——主席树

    题目大意 给一棵有点权的n个点的有根树,保证任意两点的点权不同,m次询问每次询问x的子树中权值第k大的点. 输入 先输入n,然后每个点点权,再输入n-1行每行两个数x,y代表x和y相连,再输入m,之后 ...

  8. 【刷题】BZOJ 1098 [POI2007]办公楼biu

    Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD ...

  9. Leetcode 344.反转字符串 By Python

    请编写一个函数,其功能是将输入的字符串反转过来. 示例: 输入:s = "hello" 返回:"olleh" 思路 Python里面的切片用来解决这个问题就很快 ...

  10. Linux监控--CPU、内存、I/O

    CPU top命令能够实时监控系统的运行状态,并且可以按照CPU.内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查看即时活跃的进行. 内存 free命令可以 ...