6WinRes资源使用

  1. // 6WinRes.cpp : 定义应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "6WinRes.h"
  5. #include "Resource.h"
  6. #include <iostream>
  7. #define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL)
  8. HINSTANCE g_hInst = NULL; //窗口句柄
  9. HANDLE g_hStdout = NULL; //控制台句柄
  10. CHAR szText[256] = { 0 };
  11. BOOL OnSetCursor(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  12. {
  13. //如果鼠标是在系统标题栏上,就返回FALSE
  14. int nHitTest = LOWORD(wParam);
  15. if (HTCLIENT != nHitTest)
  16. {
  17. //不在客户区,返回False
  18. //让DefWindowProc处理
  19. return FALSE;
  20. }
  21. //获得窗口的客户区
  22. RECT rcCilent = { 0 };
  23. GetClientRect(hWnd, &rcCilent);
  24. //获得当前光标的位置
  25. POINT ptPos = { 0 };
  26. GetCursorPos(&ptPos); //获得光标坐标
  27. ScreenToClient(hWnd, &ptPos); //获得客户区坐标
  28. //根据位置设置光标
  29. HCURSOR hCursor = NULL;
  30. if (ptPos.x < rcCilent.left / 2)
  31. {
  32. if (ptPos.y < rcCilent.bottom / 2)
  33. {
  34. hCursor = LoadCursor(NULL, IDC_SIZEALL);
  35. }
  36. else
  37. {
  38. hCursor = LoadCursor(NULL, IDC_CROSS);
  39. }
  40. }
  41. else
  42. {
  43. if (ptPos.y < rcCilent.bottom / 2)
  44. {
  45. hCursor = LoadCursor(NULL, IDC_WAIT);
  46. }
  47. else
  48. {
  49. hCursor = LoadCursor(NULL, IDC_UPARROW);
  50. }
  51. }
  52. //设置光标
  53. SetCursor(hCursor);
  54. return TRUE;
  55. }
  56. void OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  57. {
  58. int nCmdID = LOWORD(wParam);
  59. switch (nCmdID)
  60. {
  61. case ID_EXIT:
  62. PrintLog("ID_EXIT 触发\n");
  63. break;
  64. case ID_OPEN:
  65. PrintLog("ID_OPEN 触发\n");
  66. break;
  67. case ID_HELP:
  68. PrintLog("ID_HELP 触发\n");
  69. break;
  70. case ID_ABOUT:
  71. PrintLog("ID_ABOUT 触发\n");
  72. break;
  73. case ID_REGISTER:
  74. PrintLog("ID_REGISTER 触发\n");
  75. break;
  76. }
  77. //语法习惯
  78. //unsigned int nCmdID;
  79. //DWORD dwCmdID;
  80. //WORD wCmdId;
  81. //可以直接用 nCmdID 定义,代表数字
  82. }
  83. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  84. {
  85. switch (nMsg)
  86. {
  87. case WM_SETCURSOR:
  88. if (TRUE == OnSetCursor(hWnd, nMsg, wParam, lParam))
  89. {
  90. return 0;
  91. }
  92. //OnSetCursor(hWnd, nMsg, wParam, lParam); //VS2013直接用这句也可解决
  93. break;
  94. case WM_COMMAND:
  95. OnCommand(hWnd, nMsg, wParam, lParam);
  96. break;
  97. case WM_DESTROY:
  98. PostQuitMessage(0);
  99. break;
  100. }
  101. return DefWindowProc(hWnd, nMsg, wParam, lParam);
  102. }
  103. BOOL RegisterWnd(LPSTR pszClassName)
  104. {
  105. WNDCLASSEX wce = { 0 };
  106. wce.cbSize = sizeof(wce);
  107. wce.cbClsExtra = 0;
  108. wce.cbWndExtra = 0;
  109. wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  110. wce.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1));
  111. wce.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON3));
  112. wce.hIconSm = NULL;
  113. wce.hInstance = g_hInst;
  114. wce.lpfnWndProc = WndProc;
  115. wce.lpszClassName = pszClassName;
  116. wce.lpszMenuName = NULL;
  117. wce.style = CS_HREDRAW | CS_VREDRAW;
  118. ATOM atom = RegisterClassEx(&wce);
  119. if (atom == NULL)
  120. {
  121. return FALSE;
  122. }
  123. else
  124. {
  125. return TRUE;
  126. }
  127. }
  128. HWND CreateWnd(LPSTR pszClassName)
  129. {
  130. //加载字符串资源
  131. CHAR szTextCreate[256] = { 0 };
  132. LoadString(g_hInst, IDS_MAIN, szTextCreate, 256);
  133. //加载菜单
  134. HMENU hMainMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
  135. //加载完之后要放在窗口上,放到CreateWindow函数里的倒数第三个就成
  136. HWND hWnd = CreateWindowEx(0, pszClassName, szTextCreate, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  137. CW_USEDEFAULT, NULL, hMainMenu, g_hInst, 0);
  138. return hWnd;
  139. }
  140. void ShowWnd(HWND hWnd)
  141. {
  142. ShowWindow(hWnd, SW_SHOW);
  143. UpdateWindow(hWnd);
  144. }
  145. void Msg(HWND hWnd)
  146. {
  147. //加载加速键,按X键触发退出消息
  148. HACCEL hAccel = LoadAccelerators(g_hInst, MAKEINTRESOURCE(IDR_ACCELERATOR1));
  149. //消息循环
  150. MSG msg = { 0 };
  151. while (GetMessage(&msg, NULL, 0, 0))
  152. { //增加加速键的消息处理
  153. if (!TranslateAccelerator(hWnd, hAccel, &msg)) //加速键,如果不返回零,则以前的消息 就不执行了
  154. { //正常消息处理
  155. //字符串消息处理
  156. TranslateMessage(&msg);
  157. //消息派发
  158. DispatchMessage(&msg);
  159. }
  160. }
  161. }
  162. void ConsoleWnd()
  163. {
  164. AllocConsole();
  165. g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  166. CHAR szText[] = "Debug start:\n";
  167. WriteConsole(g_hStdout, szText, strlen(szText), NULL, NULL);
  168. }
  169. int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
  170. {
  171. g_hInst = hInstance;
  172. ConsoleWnd();
  173. RegisterWnd("oooo");
  174. HWND hWnd = CreateWnd("oooo");
  175. ShowWnd(hWnd);
  176. Msg(hWnd); //加速键处理
  177. return 0;
  178. }

来自为知笔记(Wiz)

时间: 2024-10-23 19:02:27

6WinRes资源使用的相关文章

赛灵思官网资源导读

俗话说“授之鱼不如授之以渔”,看到这边有人要资料有人送资料的,其实论坛不更应该是一个交流的空间么?那就让找资料更有效率一点,让大家花更多时间来交流吧.言归正传,写这篇文章主要想介绍Xilinx各种资料的找法.分类方法和什么问题该看哪些资料.限于经验,难免有错漏,希望大家指出错误并继续补充.一.软件Xilinx的软件主要是ISE, EDK, ChipScope Pro, System Generator, PlanAhead, ModelSim,如果要算上AccelDSP也凑合,不过相信国内没多少

67个拯救web开发者的工具、库和资源!

划重点 在本文中,我不会去谈 React.Angular.Vue 等等这些大的前端框架,也不会谈 Atom.VS code.Sublime 等等这些已经很出名的代码编辑器,我只是想简单的分享一套我认为有助于提升开发者工作流的工具集. 这套工具集中的大部分你可能见过,也可能没见过,如果有哪个让你眼前一亮,那么我的分享就很值了. 这个列表包含许多种类的资源,所以这里我将它们分组整理. Javascript 库 Particles.js-一个用来在 web 中创建炫酷的浮动粒子的库 Three.js-

Spring EL和资源调用

Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于jsp的EL表达式.我们在开发过程中,经常会涉及到调用各种资源,包含普通文本.网址.配置文件.系统环境变量等,我们可以使用Spring的表达式语言来实现资源的注入. Spring主要在注解@Value的参数中使用表达式: (1)注入普通字符 (2)注入操作系统属性 (3)注入表达式运算结果 (4)注入其他Bean的属性 (5)注入文件内容 (6)注入网址内容 (7)注入属性文件 示例代码如下: 1.准备,增加com

spark性能调优之资源调优

转https://tech.meituan.com/spark-tuning-basic.html spark作业原理 使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动.Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core.而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Stand

KRPANO资源分析工具下载720YUN全景图

1.首先,在KRPano资源分析工具中,打开某个720全景网址: 例如如下的网址: http://720yun.com/t/124jO5hmuu6 2.在任意位置右键,选择720全景图批量下载 3.会弹出保存对话框,选择一个空的文件夹进行保存 4.确认后,会弹出下载窗口,待下载拼接完成后,会自动关闭下载窗口 5.打开刚才的文件夹,即可找到还原后的2:1全景图 本博文发表于:http://www.krpano.tech/archives/553 发布者:屠龙 转载请注明出处,谢谢!

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

【内存优化】加载一张图像资源到底占据多少内存

0.内容概览 1. 简介 2. 问题 3. 概念描述 4. 具体分析 5. 总结 6. 参考文档 1.简介 Android中经常要通过ImageView进行图片资源显示.在加载图片时,首先要考虑的两个因素就是体验问题和性能问题. 其中,体验问题是指图片显示的是否正确(例如Universal-Image-Loader在适配Adapter图片资源时会导致图片显示错位),分辨率是否合适等.而体验问题主要是指图片加载速度,以及更加重要的图片加载的内存占用问题.本文重点介绍ImageView加载图片中的内

view5.3登录桌面提示当前可用桌面资源不足

问题描述:用户反馈有个桌面经常提示当前可用桌面资源不足,开始的时候反复重启还可以使用,今天发现彻底无法登录了. 解决方法:首先登录到view administrator管理平台查看该桌面发现状态是可用,说明桌面正常,通过vsphere client打开虚拟机,登录后发现一切正常,并没有任何报错和故障.推断虚拟机没问题,仔细推敲了一下报错语句,资源不足,怀疑可能是物理主机资源不足导致无法支撑虚拟机运行,所以把此虚拟机迁移至另一台物理主机上,发现可以正常连接了.

资源的引用

res文件夹中的资源分类 (可直接通过R类调用),assets文件夹中的资源,如mp3必须通过二进制流来读取 anim(xml动画) drawable(图片资源) layout(布局文件) menu(菜单) raw(二进制文件) values(常量值) xml(xml文件) 引用资源的两种方法 在xml文件中 <TextView android:id="@+id/textView" android:textColor="@color/gray81" andro