静态子窗口类型

wndclass:static

源码

  1. #include<Windows.h>
  2. #include<Windowsx.h>
  3.  
  4. HINSTANCE G_h;
  5. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  6.  
  7. int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
  8. {
  9. WNDCLASS WndClass;
  10. TCHAR* ClassName = TEXT("MyClass");
  11. HWND hwnd;
  12. MSG msg;
  13. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  14.  
  15. G_h = hInst;
  16. WndClass.cbClsExtra = ;
  17. WndClass.cbWndExtra = ;
  18. WndClass.hbrBackground = hBrush;
  19. WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  20. WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  21. WndClass.hInstance = hInst;
  22. WndClass.lpfnWndProc = WindProc;
  23. WndClass.lpszClassName = ClassName;
  24. WndClass.lpszMenuName = NULL;
  25. WndClass.style = CS_VREDRAW | CS_HREDRAW;
  26.  
  27. if (!RegisterClass(&WndClass))
  28. {
  29. MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
  30. return ;
  31. }
  32.  
  33. //CreateWindow返回之前,会发送WM_CREATE消息
  34. hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
  35. if (hwnd == NULL)
  36. {
  37. MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
  38. return ;
  39. }
  40. ShowWindow(hwnd, nShow);
  41. UpdateWindow(hwnd);
  42.  
  43. while (GetMessage(&msg, NULL, , ))
  44. {
  45. TranslateMessage(&msg);
  46. DispatchMessage(&msg);
  47. }
  48.  
  49. return ;
  50. }
  51.  
  52. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  53. {
  54. PAINTSTRUCT pt;
  55. static HWND chwnd;
  56. int cx, cy;
  57. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  58. switch (message)
  59. {
  60. case WM_CREATE:
  61. //法1 获得主程序句柄
  62. chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE|SS_CENTER, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
  63. //法2 获得主程序句柄
  64. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
  65. //发3 获得主程序句柄
  66. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
  67. return ;
  68. case WM_SIZE:
  69. cx = LOWORD(lParam);
  70. cy = HIWORD(lParam);
  71. MoveWindow(chwnd, cx / ,cy / , cx / , cy / , TRUE);
  72. return ;
  73. case WM_CTLCOLORSTATIC:
  74. SetTextColor((HDC)wParam, RGB(, , ));
  75. SetBkMode((HDC)wParam, TRANSPARENT);
  76. return (LRESULT)hBrush;
  77. case WM_COMMAND:
  78. return ;
  79. case WM_DESTROY:
  80. PostQuitMessage();
  81. return ;
  82. default:
  83. break;
  84. }
  85.  
  86. return DefWindowProc(hwnd, message, wParam, lParam);
  87. }

替换子窗口窗口处理过程,源码

  1. #include<Windows.h>
  2. #include<Windowsx.h>
  3. //#define _AFXDLL
  4. //#include<afx.h>
  5.  
  6. HINSTANCE G_h;
  7. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  8. LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  9.  
  10. int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
  11. {
  12. WNDCLASS WndClass;
  13. TCHAR* ClassName = TEXT("MyClass");
  14. HWND hwnd;
  15. MSG msg;
  16. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  17.  
  18. G_h = hInst;
  19. WndClass.cbClsExtra = ;
  20. WndClass.cbWndExtra = ;
  21. WndClass.hbrBackground = hBrush;
  22. WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  23. WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  24. WndClass.hInstance = hInst;
  25. WndClass.lpfnWndProc = WindProc;
  26. WndClass.lpszClassName = ClassName;
  27. WndClass.lpszMenuName = NULL;
  28. WndClass.style = CS_VREDRAW | CS_HREDRAW;
  29.  
  30. if (!RegisterClass(&WndClass))
  31. {
  32. MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
  33. return ;
  34. }
  35.  
  36. //CreateWindow返回之前,会发送WM_CREATE消息
  37. hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
  38. if (hwnd == NULL)
  39. {
  40. MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
  41. return ;
  42. }
  43. ShowWindow(hwnd, nShow);
  44. UpdateWindow(hwnd);
  45.  
  46. while (GetMessage(&msg, NULL, , ))
  47. {
  48. TranslateMessage(&msg);
  49. DispatchMessage(&msg);
  50. }
  51.  
  52. return ;
  53. }
  54.  
  55. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  56. {
  57. PAINTSTRUCT pt;
  58. static HWND chwnd;
  59. int cx, cy;
  60. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  61. switch (message)
  62. {
  63. case WM_CREATE:
  64. //法1 获得主程序句柄
  65. chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE | SS_CENTER, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
  66. //法2 获得主程序句柄
  67. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
  68. //发3 获得主程序句柄
  69. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
  70. //这个函数将窗口chwnd的窗口处理过程改变为MyProc。这个函数的作用,相当于把static窗口类中的lpfnWndProc值设置为MyProc
  71. SetWindowLong(chwnd, GWL_WNDPROC, (LONG)MyProc);
  72. return ;
  73. case WM_SIZE:
  74. cx = LOWORD(lParam);
  75. cy = HIWORD(lParam);
  76. MoveWindow(chwnd, cx / , cy / , cx / , cy / , TRUE);
  77. return ;
  78. case WM_CTLCOLORSTATIC:
  79. //TRACE("WM_CTLCOLORSTATIC\n");
  80. SetTextColor((HDC)wParam, RGB(, , ));
  81. SetBkMode((HDC)wParam, TRANSPARENT);
  82. return (LRESULT)hBrush;
  83. case WM_COMMAND:
  84. return ;
  85. case WM_DESTROY:
  86. PostQuitMessage();
  87. return ;
  88. default:
  89. break;
  90. }
  91.  
  92. return DefWindowProc(hwnd, message, wParam, lParam);
  93. }
  94.  
  95. LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  96. {
  97. //TRACE("MyProc\n");
  98. PAINTSTRUCT ps;
  99. HDC hdc;
  100. static int cx, cy;
  101. switch (message)
  102. {
  103. case WM_SIZE:
  104. cx = LOWORD(lParam);
  105. cy = HIWORD(lParam);
  106. return ;
  107. case WM_PAINT:
  108. hdc = BeginPaint(hwnd, &ps);
  109. Rectangle(hdc, , , cx, cy);
  110. TextOut(hdc, , , TEXT("child"), );
  111. EndPaint(hwnd, &ps);
  112. return ;
  113. case WM_DESTROY:
  114. PostQuitMessage();
  115. return ;
  116. default:
  117. break;
  118. }
  119. return DefWindowProc(hwnd, message, wParam, lParam);
  120. }

拦截窗口处理消息

  1. #include<Windows.h>
  2. #include<Windowsx.h>
  3. //#define _AFXDLL
  4. //#include<afx.h>
  5.  
  6. DWORD proc;
  7. HINSTANCE G_h;
  8. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  9. LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  10.  
  11. int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
  12. {
  13. WNDCLASS WndClass;
  14. TCHAR* ClassName = TEXT("MyClass");
  15. HWND hwnd;
  16. MSG msg;
  17. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  18.  
  19. G_h = hInst;
  20. WndClass.cbClsExtra = ;
  21. WndClass.cbWndExtra = ;
  22. WndClass.hbrBackground = hBrush;
  23. WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  24. WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  25. WndClass.hInstance = hInst;
  26. WndClass.lpfnWndProc = WindProc;
  27. WndClass.lpszClassName = ClassName;
  28. WndClass.lpszMenuName = NULL;
  29. WndClass.style = CS_VREDRAW | CS_HREDRAW;
  30.  
  31. if (!RegisterClass(&WndClass))
  32. {
  33. MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
  34. return ;
  35. }
  36.  
  37. //CreateWindow返回之前,会发送WM_CREATE消息
  38. hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
  39. if (hwnd == NULL)
  40. {
  41. MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
  42. return ;
  43. }
  44. ShowWindow(hwnd, nShow);
  45. UpdateWindow(hwnd);
  46.  
  47. while (GetMessage(&msg, NULL, , ))
  48. {
  49. TranslateMessage(&msg);
  50. DispatchMessage(&msg);
  51. }
  52.  
  53. return ;
  54. }
  55.  
  56. LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  57. {
  58. PAINTSTRUCT pt;
  59. static HWND chwnd;
  60. int cx, cy;
  61. HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
  62. switch (message)
  63. {
  64. case WM_CREATE:
  65. //法1 获得主程序句柄
  66. chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE | SS_CENTER|SS_NOTIFY, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
  67. //法2 获得主程序句柄
  68. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
  69. //发3 获得主程序句柄
  70. //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
  71. //这个函数将窗口chwnd的窗口处理过程改变为MyProc。这个函数的作用,相当于把static窗口类中的lpfnWndProc值设置为MyProc
  72. proc=SetWindowLong(chwnd, GWL_WNDPROC, (LONG)MyProc);
  73. return ;
  74. case WM_SIZE:
  75. cx = LOWORD(lParam);
  76. cy = HIWORD(lParam);
  77. MoveWindow(chwnd, cx / , cy / , cx / , cy / , TRUE);
  78. return ;
  79. case WM_CTLCOLORSTATIC:
  80. //TRACE("WM_CTLCOLORSTATIC\n");
  81. SetTextColor((HDC)wParam, RGB(, , ));
  82. SetBkMode((HDC)wParam, TRANSPARENT);
  83. return (LRESULT)hBrush;
  84. case WM_COMMAND:
  85. return ;
  86. case WM_DESTROY:
  87. PostQuitMessage();
  88. return ;
  89. default:
  90. break;
  91. }
  92.  
  93. return DefWindowProc(hwnd, message, wParam, lParam);
  94. }
  95.  
  96. LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  97. {
  98. //TRACE("MyProc\n");
  99. PAINTSTRUCT ps;
  100. HDC hdc;
  101. static int cx, cy;
  102. //TRACE("%d %d %d\n", message, wParam, lParam);
  103. switch (message)
  104. {
  105. case WM_SIZE:
  106. cx = LOWORD(lParam);
  107. cy = HIWORD(lParam);
  108. //return 0;
  109. break;
  110. case WM_PAINT:
  111. hdc = BeginPaint(hwnd, &ps);
  112. Rectangle(hdc, , , cx, cy);
  113. TextOut(hdc, , , TEXT("child"), );
  114. EndPaint(hwnd, &ps);
  115. //return 0;
  116. break;
  117. default:
  118. break;
  119. }
  120. return ((LRESULT (CALLBACK*)(HWND , UINT , WPARAM , LPARAM ))proc)(hwnd, message, wParam, lParam);
  121. }

13 Windows编程——系统内置窗口子类型之静态子窗口的更多相关文章

  1. 15 Windows编程——系统内置窗口子类型之button

    button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 #include<Windows.h> #include<Windowsx.h ...

  2. 16 Windows编程——系统内置窗口子类型之edit、ComboBox、ownerbutton、listbox

    edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_CO ...

  3. 12 Windows编程——子窗口和系统内置窗口类“BUTTON”

    创建子窗口类,使得子窗口有自己的处理过程. 子窗口类型WS_CHILD不能和WS_POPUP一起使用!为什么子窗口要有自己的处理过程?如果使用主窗口类来创建子窗口,那么子窗口和主窗口将公用窗口处理过程 ...

  4. windows 编程 —— 子窗口 与 子窗口控件

    目录: 子窗口与主窗口的交互 子窗口控件 按钮类别 button 滚动条类别 scrollbar 静态类别  static 编辑框类别 edit 清单方块 listbox 子窗口与主窗口的交互 创建窗 ...

  5. 07 Windows编程——窗口滚动条

    两个函数:GetScrolnfo和SetScrollnfo一个结构:SCROLLINFO两个消息:WM_CREATE和WM_SIZE 滚动条结构体 typedef struct tagSCROLLIN ...

  6. 【Windows编程】入门篇——win 32窗口的hello word!

    ✍  Windows编程基础 1.Win 32应用程序基本类型 1)  控制台程序 不需要完善的windows窗口,可以使用DOS窗口方式显示 2)  Win 32窗口程序 包含窗口的程序,可以通过窗 ...

  7. 设置windows窗口ICON 【windows 编程】【API】【原创】

    1. ICON介绍 最近开始接触windows 编程,因此将自己所接触的一些零散的知识进行整理并记录.本文主要介绍了如何更改windows对话框窗口的ICON图标.这里首先介绍一下windows IC ...

  8. Windows 编程中恼人的各种字符以及字符指针类型

    在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就 ...

  9. Windows编程___创建窗口

    创建Windows窗口不难,可以简要的概括为: 1,# 注册一个窗口类 填充WNDCLASS结构 书写窗口消息处理函数WinProc 2,# 创建一个窗口 填写基本的窗口信息 3,# 显示窗口 4,# ...

随机推荐

  1. 文件被sourceTree忽略了怎么办

  2. 第十二章 与Spring集成——《跟我学Shiro》

    转发:https://www.iteye.com/blog/jinnianshilongnian-2029717 目录贴:跟我学Shiro目录贴 Shiro的组件都是JavaBean/POJO式的组件 ...

  3. pip3 install pyinstaller 报错了的处理方法

    http://www.pyinstaller.org/downloads.html 下载压缩包 解压到本地后,在目录处cmd 执行命令 python setup.py install 然后执行pip ...

  4. 泰乐事(Telos)白皮书中文版 <零> 封面及目录

    <泰乐事白皮书> 一个可持续发展的去中心化EOSIO网络 作者:道格拉斯·合恩 泰乐事(Telos)—— 事物的终极目标. Telos一词来源于希腊语ΤΈΛΟΣ. “一颗橡果的终极目标是成 ...

  5. HTML中,a href =" "和 a href ="#"的区别

    a href ="" 刷新当前页面,回到页面顶部a href ="#"不会刷新页面,回到页面顶部.浏览器地址栏网址后面会多显示1个#.

  6. SpringBoot(三)手写starter pom自动配置

    思想:主要是EnableAutoConfiguration在启动的时候会扫描spring.factories并加载 1在resource下面新建META-INF/spring.factories 2在 ...

  7. K8S从入门到放弃系列-(2)集群根证书准备

    k8s从1.8版本开始,集群中各个组件需要使用TLS证书对通信进行加密,每个k8s集群都需要有独立的CA证书体系,这里我们采用比较常用的CloudFlare 的 PKI 工具集 cfssl 来生成 C ...

  8. vs2019将小游戏打包成msi踩的坑(个人)

    1.VS无Setup projecrt? vs2015之前是自带打包msi功能的,vs2017之后需要自己去下载插件: 下载地址:https://marketplace.visualstudio.co ...

  9. ARTS第九周打卡

    Algorithm : 做一个 leetcode 的算法题 /* 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...

  10. vsftp多个用户公享同一个文件,但是权限不同

    如标题:vsftp多个用户公享同一个文件,但是权限不同.如何做到呢.首先创建多个用户,并且指定同一个目录