13 Windows编程——系统内置窗口子类型之静态子窗口
静态子窗口类型
wndclass:static
源码
- #include<Windows.h>
- #include<Windowsx.h>
- HINSTANCE G_h;
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
- {
- WNDCLASS WndClass;
- TCHAR* ClassName = TEXT("MyClass");
- HWND hwnd;
- MSG msg;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- G_h = hInst;
- WndClass.cbClsExtra = ;
- WndClass.cbWndExtra = ;
- WndClass.hbrBackground = hBrush;
- WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
- WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- WndClass.hInstance = hInst;
- WndClass.lpfnWndProc = WindProc;
- WndClass.lpszClassName = ClassName;
- WndClass.lpszMenuName = NULL;
- WndClass.style = CS_VREDRAW | CS_HREDRAW;
- if (!RegisterClass(&WndClass))
- {
- MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- //CreateWindow返回之前,会发送WM_CREATE消息
- hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
- if (hwnd == NULL)
- {
- MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- ShowWindow(hwnd, nShow);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, , ))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return ;
- }
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT pt;
- static HWND chwnd;
- int cx, cy;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- switch (message)
- {
- case WM_CREATE:
- //法1 获得主程序句柄
- chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE|SS_CENTER, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
- //法2 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
- //发3 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
- return ;
- case WM_SIZE:
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- MoveWindow(chwnd, cx / ,cy / , cx / , cy / , TRUE);
- return ;
- case WM_CTLCOLORSTATIC:
- SetTextColor((HDC)wParam, RGB(, , ));
- SetBkMode((HDC)wParam, TRANSPARENT);
- return (LRESULT)hBrush;
- case WM_COMMAND:
- return ;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- default:
- break;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
替换子窗口窗口处理过程,源码
- #include<Windows.h>
- #include<Windowsx.h>
- //#define _AFXDLL
- //#include<afx.h>
- HINSTANCE G_h;
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
- {
- WNDCLASS WndClass;
- TCHAR* ClassName = TEXT("MyClass");
- HWND hwnd;
- MSG msg;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- G_h = hInst;
- WndClass.cbClsExtra = ;
- WndClass.cbWndExtra = ;
- WndClass.hbrBackground = hBrush;
- WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
- WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- WndClass.hInstance = hInst;
- WndClass.lpfnWndProc = WindProc;
- WndClass.lpszClassName = ClassName;
- WndClass.lpszMenuName = NULL;
- WndClass.style = CS_VREDRAW | CS_HREDRAW;
- if (!RegisterClass(&WndClass))
- {
- MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- //CreateWindow返回之前,会发送WM_CREATE消息
- hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
- if (hwnd == NULL)
- {
- MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- ShowWindow(hwnd, nShow);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, , ))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return ;
- }
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT pt;
- static HWND chwnd;
- int cx, cy;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- switch (message)
- {
- case WM_CREATE:
- //法1 获得主程序句柄
- chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE | SS_CENTER, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
- //法2 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
- //发3 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
- //这个函数将窗口chwnd的窗口处理过程改变为MyProc。这个函数的作用,相当于把static窗口类中的lpfnWndProc值设置为MyProc
- SetWindowLong(chwnd, GWL_WNDPROC, (LONG)MyProc);
- return ;
- case WM_SIZE:
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- MoveWindow(chwnd, cx / , cy / , cx / , cy / , TRUE);
- return ;
- case WM_CTLCOLORSTATIC:
- //TRACE("WM_CTLCOLORSTATIC\n");
- SetTextColor((HDC)wParam, RGB(, , ));
- SetBkMode((HDC)wParam, TRANSPARENT);
- return (LRESULT)hBrush;
- case WM_COMMAND:
- return ;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- default:
- break;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
- LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- //TRACE("MyProc\n");
- PAINTSTRUCT ps;
- HDC hdc;
- static int cx, cy;
- switch (message)
- {
- case WM_SIZE:
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- return ;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- Rectangle(hdc, , , cx, cy);
- TextOut(hdc, , , TEXT("child"), );
- EndPaint(hwnd, &ps);
- return ;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- default:
- break;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
拦截窗口处理消息
- #include<Windows.h>
- #include<Windowsx.h>
- //#define _AFXDLL
- //#include<afx.h>
- DWORD proc;
- HINSTANCE G_h;
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
- {
- WNDCLASS WndClass;
- TCHAR* ClassName = TEXT("MyClass");
- HWND hwnd;
- MSG msg;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- G_h = hInst;
- WndClass.cbClsExtra = ;
- WndClass.cbWndExtra = ;
- WndClass.hbrBackground = hBrush;
- WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
- WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- WndClass.hInstance = hInst;
- WndClass.lpfnWndProc = WindProc;
- WndClass.lpszClassName = ClassName;
- WndClass.lpszMenuName = NULL;
- WndClass.style = CS_VREDRAW | CS_HREDRAW;
- if (!RegisterClass(&WndClass))
- {
- MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- //CreateWindow返回之前,会发送WM_CREATE消息
- hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
- if (hwnd == NULL)
- {
- MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
- return ;
- }
- ShowWindow(hwnd, nShow);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, , ))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return ;
- }
- LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT pt;
- static HWND chwnd;
- int cx, cy;
- HBRUSH hBrush = CreateSolidBrush(RGB(, , ));
- switch (message)
- {
- case WM_CREATE:
- //法1 获得主程序句柄
- chwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE | SS_CENTER|SS_NOTIFY, , , , , hwnd, (HMENU), ((LPCREATESTRUCT)lParam)->hInstance, NULL);
- //法2 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, G_h, NULL);
- //发3 获得主程序句柄
- //hwnd = CreateWindow(TEXT("static"), TEXT("中国"), WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
- //这个函数将窗口chwnd的窗口处理过程改变为MyProc。这个函数的作用,相当于把static窗口类中的lpfnWndProc值设置为MyProc
- proc=SetWindowLong(chwnd, GWL_WNDPROC, (LONG)MyProc);
- return ;
- case WM_SIZE:
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- MoveWindow(chwnd, cx / , cy / , cx / , cy / , TRUE);
- return ;
- case WM_CTLCOLORSTATIC:
- //TRACE("WM_CTLCOLORSTATIC\n");
- SetTextColor((HDC)wParam, RGB(, , ));
- SetBkMode((HDC)wParam, TRANSPARENT);
- return (LRESULT)hBrush;
- case WM_COMMAND:
- return ;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- default:
- break;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
- LRESULT CALLBACK MyProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- //TRACE("MyProc\n");
- PAINTSTRUCT ps;
- HDC hdc;
- static int cx, cy;
- //TRACE("%d %d %d\n", message, wParam, lParam);
- switch (message)
- {
- case WM_SIZE:
- cx = LOWORD(lParam);
- cy = HIWORD(lParam);
- //return 0;
- break;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- Rectangle(hdc, , , cx, cy);
- TextOut(hdc, , , TEXT("child"), );
- EndPaint(hwnd, &ps);
- //return 0;
- break;
- default:
- break;
- }
- return ((LRESULT (CALLBACK*)(HWND , UINT , WPARAM , LPARAM ))proc)(hwnd, message, wParam, lParam);
- }
13 Windows编程——系统内置窗口子类型之静态子窗口的更多相关文章
- 15 Windows编程——系统内置窗口子类型之button
button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 #include<Windows.h> #include<Windowsx.h ...
- 16 Windows编程——系统内置窗口子类型之edit、ComboBox、ownerbutton、listbox
edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_CO ...
- 12 Windows编程——子窗口和系统内置窗口类“BUTTON”
创建子窗口类,使得子窗口有自己的处理过程. 子窗口类型WS_CHILD不能和WS_POPUP一起使用!为什么子窗口要有自己的处理过程?如果使用主窗口类来创建子窗口,那么子窗口和主窗口将公用窗口处理过程 ...
- windows 编程 —— 子窗口 与 子窗口控件
目录: 子窗口与主窗口的交互 子窗口控件 按钮类别 button 滚动条类别 scrollbar 静态类别 static 编辑框类别 edit 清单方块 listbox 子窗口与主窗口的交互 创建窗 ...
- 07 Windows编程——窗口滚动条
两个函数:GetScrolnfo和SetScrollnfo一个结构:SCROLLINFO两个消息:WM_CREATE和WM_SIZE 滚动条结构体 typedef struct tagSCROLLIN ...
- 【Windows编程】入门篇——win 32窗口的hello word!
✍ Windows编程基础 1.Win 32应用程序基本类型 1) 控制台程序 不需要完善的windows窗口,可以使用DOS窗口方式显示 2) Win 32窗口程序 包含窗口的程序,可以通过窗 ...
- 设置windows窗口ICON 【windows 编程】【API】【原创】
1. ICON介绍 最近开始接触windows 编程,因此将自己所接触的一些零散的知识进行整理并记录.本文主要介绍了如何更改windows对话框窗口的ICON图标.这里首先介绍一下windows IC ...
- Windows 编程中恼人的各种字符以及字符指针类型
在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就 ...
- Windows编程___创建窗口
创建Windows窗口不难,可以简要的概括为: 1,# 注册一个窗口类 填充WNDCLASS结构 书写窗口消息处理函数WinProc 2,# 创建一个窗口 填写基本的窗口信息 3,# 显示窗口 4,# ...
随机推荐
- 文件被sourceTree忽略了怎么办
- 第十二章 与Spring集成——《跟我学Shiro》
转发:https://www.iteye.com/blog/jinnianshilongnian-2029717 目录贴:跟我学Shiro目录贴 Shiro的组件都是JavaBean/POJO式的组件 ...
- pip3 install pyinstaller 报错了的处理方法
http://www.pyinstaller.org/downloads.html 下载压缩包 解压到本地后,在目录处cmd 执行命令 python setup.py install 然后执行pip ...
- 泰乐事(Telos)白皮书中文版 <零> 封面及目录
<泰乐事白皮书> 一个可持续发展的去中心化EOSIO网络 作者:道格拉斯·合恩 泰乐事(Telos)—— 事物的终极目标. Telos一词来源于希腊语ΤΈΛΟΣ. “一颗橡果的终极目标是成 ...
- HTML中,a href =" "和 a href ="#"的区别
a href ="" 刷新当前页面,回到页面顶部a href ="#"不会刷新页面,回到页面顶部.浏览器地址栏网址后面会多显示1个#.
- SpringBoot(三)手写starter pom自动配置
思想:主要是EnableAutoConfiguration在启动的时候会扫描spring.factories并加载 1在resource下面新建META-INF/spring.factories 2在 ...
- K8S从入门到放弃系列-(2)集群根证书准备
k8s从1.8版本开始,集群中各个组件需要使用TLS证书对通信进行加密,每个k8s集群都需要有独立的CA证书体系,这里我们采用比较常用的CloudFlare 的 PKI 工具集 cfssl 来生成 C ...
- vs2019将小游戏打包成msi踩的坑(个人)
1.VS无Setup projecrt? vs2015之前是自带打包msi功能的,vs2017之后需要自己去下载插件: 下载地址:https://marketplace.visualstudio.co ...
- ARTS第九周打卡
Algorithm : 做一个 leetcode 的算法题 /* 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...
- vsftp多个用户公享同一个文件,但是权限不同
如标题:vsftp多个用户公享同一个文件,但是权限不同.如何做到呢.首先创建多个用户,并且指定同一个目录