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

edit类型的子窗口

ES_MULTILINE:多行输入文本框

窗口的消息:

WL_COMMAND:

EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_COMMAND消息,其通知码是EN_CHANGE。

WM_GETTEXT:

用SendMessage函数给edit窗口发送这个消息,同时,给wparam参数传递我们想要获得的字符个数,lParam传递一个内存块地址,sendMessage函数返回后,
lParam指向的内存中,将保存获得的字符。

WL_GETTEXTLENGTH:

用 SendMessage函数给edit窗口发送这个消息,将wParam和1Param都赋值为NULL,那SendMessage函数,将返回edit中的字符个数,但这个字符个数不包括NULL结尾字符。

edit空间演示源码

 1 #include<Windows.h>
 2
 3 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 4
 5 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
 6 {
 7     WNDCLASS WndClass;
 8     TCHAR* ClassName = TEXT("MyClass");
 9     HWND hwnd;
10     MSG msg;
11     HBRUSH hBrush;
12     hBrush = CreateSolidBrush(RGB(249,98,241));
13
14     WndClass.cbClsExtra = 0;
15     WndClass.cbWndExtra = 0;
16     WndClass.hbrBackground = hBrush;
17     WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
18     WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
19     WndClass.hInstance = hInst;
20     WndClass.lpfnWndProc = WindProc;
21     WndClass.lpszClassName = ClassName;
22     WndClass.lpszMenuName = NULL;
23     WndClass.style = CS_VREDRAW | CS_HREDRAW;
24
25     if (!RegisterClass(&WndClass))
26     {
27         MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
28         return 0;
29     }
30
31     hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL);
32     if (hwnd == NULL)
33     {
34         MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
35         return 0;
36     }
37     ShowWindow(hwnd, nShow);
38     UpdateWindow(hwnd);
39
40     while (GetMessage(&msg, NULL, 0, 0))
41     {
42         TranslateMessage(&msg);
43         DispatchMessage(&msg);
44     }
45
46     return 0;
47 }
48
49 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
50 {
51     HDC hdc;
52     static int cx, cy;
53     static editHwnd, staticHwnd;
54     TCHAR str[1024];
55     int length;
56     switch (message)
57     {
58     case WM_CREATE:
59         editHwnd = CreateWindow(TEXT("edit"),NULL, WS_CHILD | WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_AUTOVSCROLL , 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
60         staticHwnd = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE|WS_BORDER, 0, 0, 0, 0, hwnd, (HMENU)2, GetModuleHandle(NULL), NULL);
61         return 0;
62     case WM_SIZE:
63         cx = LOWORD(lParam);
64         cy = HIWORD(lParam);
65         MoveWindow(editHwnd, 0, 0, cx/2, cy/2, TRUE);
66         MoveWindow(staticHwnd, cx / 2, cy / 2, cx, cy, TRUE);
67         return 0;
68     case WM_COMMAND:
69         if (HIWORD(wParam)==EN_CHANGE)
70         {
71             length = SendMessage(editHwnd, WM_GETTEXTLENGTH, NULL, NULL) + 1;
72             length = length > 1023 ? 1023 : length;
73             SendMessage(editHwnd, WM_GETTEXT, length, (LPARAM)str) ;
74             str[length] = ‘/0‘;
75             SetWindowText(staticHwnd,str);
76         }
77         return 0;
78     case WM_DESTROY:
79         PostQuitMessage(0);
80         return 0;
81     default:
82         break;
83     }
84
85     return DefWindowProc(hwnd, message, wParam, lParam);
86 }

运行结果

ComboBox类型的子窗口

ComboBox子窗口的三种主要子类型:

CB_ADDSTRING:在combobox控件的list框中,增加一个字符串,wParam=NULL,lParam符串的指针。

WL_COMMAND:

CBN_SELCHANGE:当combobox中的选项发生变化时,发送这个通知码,其中LOWORD(lParam)就是这个combobox的窗口标识ID。

CB_GETCURSEL:用SendMessage函数,发送这个消息给combobox子窗口,那么这个函数将返回被选中的列表项的索引(索引是从0开始的)。wParam=lParam=NULL.

演示代码

 1 #include<Windows.h>
 2 #include<WinUser.h>
 3 #include<tchar.h>
 4 #include<stdio.h>
 5
 6 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 7
 8 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
 9 {
10     WNDCLASS WndClass;
11     TCHAR* ClassName = TEXT("MyClass");
12     HWND hwnd;
13     MSG msg;
14
15     WndClass.cbClsExtra = 0;
16     WndClass.cbWndExtra = 0;
17     WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
18     WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
19     WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
20     WndClass.hInstance = hInst;
21     WndClass.lpfnWndProc = WindProc;
22     WndClass.lpszClassName = ClassName;
23     WndClass.lpszMenuName = NULL;
24     WndClass.style = CS_VREDRAW | CS_HREDRAW;
25
26     if (!RegisterClass(&WndClass))
27     {
28         MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
29         return 0;
30     }
31
32     //CreateWindow返回之前,会发送WM_CREATE消息
33     hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL);
34     if (hwnd == NULL)
35     {
36         MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
37         return 0;
38     }
39     ShowWindow(hwnd, nShow);
40     UpdateWindow(hwnd);
41
42     while (GetMessage(&msg, NULL, 0, 0))
43     {
44         TranslateMessage(&msg);
45         DispatchMessage(&msg);
46     }
47
48     return 0;
49 }
50
51 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
52 {
53     PAINTSTRUCT pt;
54     HDC hdc;
55     static HWND ComboHwnd1, ComboHwnd2, ComboHwnd3,button,staticHwnd;
56     TCHAR str[1024];
57     switch (message)
58     {
59     case WM_CREATE:
60         ComboHwnd1 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_SIMPLE|CBS_AUTOHSCROLL|WS_VSCROLL, 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
61         ComboHwnd2 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWN, 0, 0, 0, 0, hwnd, (HMENU)2, GetModuleHandle(NULL), NULL);
62         ComboHwnd3 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 0, 0, hwnd, (HMENU)3, GetModuleHandle(NULL), NULL);
63         button = CreateWindow(TEXT("button"), TEXT("OK"), WS_CHILD | WS_VISIBLE , 0, 0, 0, 0, hwnd, (HMENU)4, GetModuleHandle(NULL), NULL);
64         staticHwnd= CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU)5, GetModuleHandle(NULL), NULL);
65         return 0;
66     case WM_SIZE:
67         MoveWindow(ComboHwnd1, 0, 0, 100, 100, TRUE);
68         MoveWindow(ComboHwnd2, 150, 0, 100, 150, TRUE);
69         MoveWindow(ComboHwnd3, 300, 0, 100, 150, TRUE);
70         MoveWindow(button, 20, 120, 50, 25, TRUE);
71         MoveWindow(staticHwnd, 0, 150, 100, 100, TRUE);
72         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-1"));
73         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-2"));
74         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-3"));
75         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-4"));
76         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-5"));
77         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-6"));
78         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-7"));
79         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-8"));
80         SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-9"));
81         return 0;
82     case WM_COMMAND:
83         if (HIWORD(wParam) == CBN_SELCHANGE)
84         {
85             GetWindowText(ComboHwnd1,str,50);
86             SetWindowText(staticHwnd,str);
87         }
88         return 0;
89     case WM_DESTROY:
90         PostQuitMessage(0);
91         return 0;
92     default:
93         break;
94     }
95
96     return DefWindowProc(hwnd, message, wParam, lParam);
97 }

运行结果:

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9343731.html

时间: 2024-08-30 03:28:26

16 Windows编程——系统内置窗口子类型之edit、ComboBox的相关文章

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

button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 1 #include<Windows.h> 2 #include<Windowsx.h> 3 4 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 5 6 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd,

走进windows编程的世界-----窗口的注册及创建

1   窗口注册和创建 1.1WIN32 窗口程序创建步骤 1.WinMain入口函数的定义 2.WindowProc函数的定义 3.注册窗口类 RegisterClass.RegisterClassEX 4.创建窗口 CreateWindow.CreateWindowEx HWND CreateWindow( LPCTSTRlpClassName,//指向已注册的窗口类的名称的指针 LPCTSTRlpWindowName,//指向窗口名称的指针 DWORDdwStyle,//窗口的风格 int

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

在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就会想不起来.所以,下面就对此做一个总结. 首先,先来看一下ASCII编码和UNICODE编码的区别.下面是<Windows 程序设计>一书中对Unicode编码的说明: 简单地说,Unicode扩展自ASCII字符集.在严格的ASCII中,每个字符用7位表示,或者计算机上普遍使用的每字符有8位宽:

windows系统内置ftp客户端和相关命令

目的:学会使用windows系统内置ftp客户端和相关命令. 环境:windows 7 情景:多个设备需要备份它们的配置文件,设置为明天自动备份,以FTP服务下载到服务器,并以日期保存. 这里需要使用FTP服务,这个服务一般系统都自带有,可以使用命令模式,或写成批处理脚本运行. ftp命令支持交互和执行配置操作: 有如下参数: -v              禁止显示远程服务器响应. -n              禁止在初始连接时自动登录. -i              关闭多文件传输过程中

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

1. ICON介绍 最近开始接触windows 编程,因此将自己所接触的一些零散的知识进行整理并记录.本文主要介绍了如何更改windows对话框窗口的ICON图标.这里首先介绍一下windows ICON定义.在我们使用的windows APP上,一般都存在两个ICON.一个是打开APP后显示与左上角的小的图标文件(SMALL ICON)以及按下Alt+Tab切换窗口时显示的一个大的图标文件(BIG ICON).以windows自带的记事本程序为例,小的图标文件如下图1所示: 图1 记事本程序的

Flink实战(七) - Time &amp; Windows编程

0 相关源码 掌握Flink中三种常用的Time处理方式,掌握Flink中滚动窗口以及滑动窗口的使用,了解Flink中的watermark. Flink 在流处理工程中支持不同的时间概念. 1 处理时间(Processing time) 执行相应算子操作的机器的系统时间. 当流程序在处理时间运行时,所有基于时间的 算子操作(如时间窗口)将使用运行相应算子的机器的系统时钟.每小时处理时间窗口将包括在系统时钟指示整个小时之间到达特定算子的所有记录. 例如,如果应用程序在上午9:15开始运行,则第一个

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

【Windows编程】系列第三篇:文本字符输出

上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大核心组件之一的GDI32.dll封装了所有的文本和图像输出. GDI基本知识 Windows下要绘图和输出文本,都是通过GDI(Graphics Device Interface,图形设备接口)完成的,GDI是windows在绘制图文时的设备上下文环境,包括画

C++ GUI Qt4编程-创建自定义窗口部件

C++ GUI Qt4编程-创建自定义窗口部件 Qtqt4 通过Qt窗口部件进行子类化或者直接对QWidget进行子类化,就可以创建自定义窗口部件,下面示范两种方式,并且也会说明如何把自定义窗口部件集成到Qt设计师中,这样就可以像使用内置的Qt窗口部件一样来使用它们,最后展示使用双缓冲技术(一种用于快速绘制的强大技术)的自定义窗口部件. 1.自定义Qt窗口部件 我们发现Qt窗口部件需要更多的自定义定制,这些定制可能要比它在Qt设计师里设置的属性或者对它调用的那些函数更多一些,一个简单而直接的解决