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空间演示源码

 #include<Windows.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;
hBrush = CreateSolidBrush(RGB(,,)); 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 ;
} 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)
{
HDC hdc;
static int cx, cy;
static editHwnd, staticHwnd;
TCHAR str[];
int length;
switch (message)
{
case WM_CREATE:
editHwnd = CreateWindow(TEXT("edit"),NULL, WS_CHILD | WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_AUTOVSCROLL , , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
staticHwnd = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE|WS_BORDER, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
return ;
case WM_SIZE:
cx = LOWORD(lParam);
cy = HIWORD(lParam);
MoveWindow(editHwnd, , , cx/, cy/, TRUE);
MoveWindow(staticHwnd, cx / , cy / , cx, cy, TRUE);
return ;
case WM_COMMAND:
if (HIWORD(wParam)==EN_CHANGE)
{
length = SendMessage(editHwnd, WM_GETTEXTLENGTH, NULL, NULL) + ;
length = length > ? : length;
SendMessage(editHwnd, WM_GETTEXT, length, (LPARAM)str) ;
str[length] = '/0';
SetWindowText(staticHwnd,str);
}
return ;
case WM_DESTROY:
PostQuitMessage();
return ;
default:
break;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

运行结果

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.

演示代码

 #include<Windows.h>
#include<WinUser.h>
#include<tchar.h>
#include<stdio.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; WndClass.cbClsExtra = ;
WndClass.cbWndExtra = ;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + );
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;
HDC hdc;
static HWND ComboHwnd1, ComboHwnd2, ComboHwnd3,button,staticHwnd;
TCHAR str[];
switch (message)
{
case WM_CREATE:
ComboHwnd1 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_SIMPLE|CBS_AUTOHSCROLL|WS_VSCROLL, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
ComboHwnd2 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWN, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
ComboHwnd3 = CreateWindow(TEXT("ComboBox"), NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
button = CreateWindow(TEXT("button"), TEXT("OK"), WS_CHILD | WS_VISIBLE , , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
staticHwnd= CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
return ;
case WM_SIZE:
MoveWindow(ComboHwnd1, , , , , TRUE);
MoveWindow(ComboHwnd2, , , , , TRUE);
MoveWindow(ComboHwnd3, , , , , TRUE);
MoveWindow(button, , , , , TRUE);
MoveWindow(staticHwnd, , , , , TRUE);
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-1"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-2"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-3"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-4"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-5"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-6"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-7"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-8"));
SendMessage(ComboHwnd1, CB_ADDSTRING, NULL, (LPARAM)TEXT("char-9"));
return ;
case WM_COMMAND:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
GetWindowText(ComboHwnd1,str,);
SetWindowText(staticHwnd,str);
}
return ;
case WM_DESTROY:
PostQuitMessage();
return ;
default:
break;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

运行结果:

 ownerbutton、listbox

演示代码

 #include<Windows.h>
#include<WinUser.h>
#include<tchar.h>
#include<stdio.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; hBrush = CreateSolidBrush(RGB(, , )); 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)
{
static int cx, cy;
static HWND ownerbutton,scroll,listbox;
int index;
TCHAR str[];
RECT rect;
switch (message)
{
case WM_CREATE:
//创建普通button
//ownerbutton = CreateWindow(TEXT("button"), TEXT("OK"), WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
//创建ownerbutton
ownerbutton = CreateWindow(TEXT("button"), TEXT("OK"), WS_CHILD | WS_VISIBLE|BS_OWNERDRAW, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
scroll = CreateWindow(TEXT("ScrollBar"), NULL, WS_CHILD | WS_VISIBLE|SBS_VERT , , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
listbox = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_VISIBLE |LBS_STANDARD, , , , , hwnd, (HMENU), GetModuleHandle(NULL), NULL);
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-1"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-2"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-3"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-4"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-5"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-6"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-7"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-8"));
SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)TEXT("char-9"));
return ;
case WM_SIZE:
cx = LOWORD(lParam);
cy = HIWORD(lParam);
MoveWindow(ownerbutton, , , , , TRUE);
MoveWindow(scroll, cx-, , , cy, TRUE);
MoveWindow(listbox, , , , , TRUE);
return ;
case WM_PAINT:
return ;
case WM_DRAWITEM:
SetTextColor(((DRAWITEMSTRUCT*)lParam)->hDC, RGB(, , ));
TextOut(((DRAWITEMSTRUCT*)lParam)->hDC,,, TEXT("确定"),);
return ;
case WM_CTLCOLORBTN:
GetWindowRect(ownerbutton, &rect);
SetBkMode((HDC)wParam,TRANSPARENT);
SelectObject((HDC)wParam, CreateSolidBrush(RGB(, , )));
Rectangle((HDC)wParam,,,rect.right-rect.left,rect.bottom-rect.top);
return (LRESULT)CreateSolidBrush(RGB(, , ));
case WM_VSCROLL:
//处理方法参考之前滚动条处理方法
return ;
case WM_COMMAND:
index = SendMessage(listbox, LB_GETCURSEL, NULL,NULL);
SendMessage(listbox, LB_GETTEXT, index, (LPARAM)str);
return ;
case WM_DESTROY:
PostQuitMessage();
return ;
default:
break;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

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

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

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

  2. 13 Windows编程——系统内置窗口子类型之静态子窗口

    静态子窗口类型 wndclass:static 源码 #include<Windows.h> #include<Windowsx.h> HINSTANCE G_h; LRESU ...

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

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

  4. 学习windows编程 day3 之窗口绘画一:点线绘制

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

  5. Windows编程___创建窗口

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

  6. 学习windows编程 day3 之窗口绘画二:边框绘制函数

    #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...

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

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

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

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

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

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

随机推荐

  1. 无法嵌入互操作类型"NationalInstruments.TestStand.Interop.UI.ExecutionViewOptions"。请改用适用的接口

    参考一下文章说明, 修改Interop.UI动态库的引入属性为 False,不再报错:   VS2010,VS2012,VS2013中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法 在VS2 ...

  2. Python - Django - simple_tag 和 inclusion_tag

    simple_tag: simple_tag 和自定义 filter 类似,但可以接收更多更灵活的参数 在 app01/templatetags/ 目录下创建 mysimple_tag.py mysi ...

  3. 超文本css样式换行

    之前有关于LODOP中纯文本换行的相关博文:Lodop纯文本英文-等符号自动换行问题纯文本的遇到不拆分的单词的时候,可以通过LODOP 语句设置允许标点溢出,且英文单词拆开.超文本需要通过css样式控 ...

  4. 【Leetcode_easy】876. Middle of the Linked List

    problem 876. Middle of the Linked List 参考 1. Leetcode_easy_876. Middle of the Linked List; 完

  5. 【C# 开发技巧】 c#窗体关于调试界面和运行界面不一样的原因之一

    如下图所示: 原因是因为主窗体属性AutoScaleMode设置为:Font了: 按自己需求将AutoScaleMode设置修改即可. 另外一个可能是系统显示-缩放与布局-要调整到100% 如下图:

  6. AMSR-E/AMSR-2数据介绍与下载

    1 AMSR-E数据介绍 The Advanced Microwave Scanning Radiometer for EOS (AMSR-E)是ADEOS-II 上的AMSR的改进版本, 是JAXA ...

  7. 构建Springboot项目的3种方式

    一.自己创建: 1.创建maven项目 2.pom.xml添加如下内容: <!--1.指定依赖都由springboot管理--> <parent> <groupId> ...

  8. 教你使用Webpack搭建环境 TypeScript (2)

      一. 环境搭建1.1. TypeScript环境安装已经配置好的环境,大家可以直接下载:https://github.com/coderwhy/HYLearnTS.git在上一个章节中我们说过,T ...

  9. STL常用

    nth_element(first,nth,last) first,last 第一个和最后一个迭代器,也可以直接用数组的位置. 将第n个大的元素放到nth位置上,左边元素都小于它,右边元素都大于它. ...

  10. Git服务器搭建--ssh/http

    测试环境 Windows 7 Ultimate, 64-bit 6.1.7601, Service Pack 1(实体机,虚拟机VMware的宿主机) VMware® Workstation 7.1. ...