win32 控件的创建和消息响应

1. 控件的创建

控件的创建和窗口创建是一样的,例如:

//-------- 创建窗口或控件  ----
hwnd = CreateWindow("button","myButton01", WS_VISIBLE|WS_CHILD, 80,60,35,25, hWnd,(HMENU)IDB_BUTTON01,hInst,NULL);

这是一个按钮的创建,其中hWnd是窗口句柄,hInst是应用程序句柄。

其他控件类似的可以把第一个参数"button"改为"edit","listbox","static","combobox"等等;

如果要创建的控件有很多,可以用一个循环和宏组合代替:

#define CreateCtrl(s) s.hCtrl=CreateWindow(s.sClass,s.sCaption,s.wStyle, s.x,s.y,s.w,s.h, hWnd,s.id,hInst,NULL)#define ctrlNum 2// 上面的 hInst 应该设为全局变量,在窗口创建时初始化struct CtrlParam{  HWND hCtrl;  char sClass[8];  char sCaption[16];  DWORD dwStyle;  int x;  int y;  int w;  int h;  int id;};CtrlParam ctrlParams[ctrlNum] =
{{"0,button","myButton02", WS_VISIBLE|WS_CHILD, 120,60,35,25,(HMENU)IDB_BUTTON02},// {...},{"0,edit","myEdit01", WS_VISIBLE|WS_CHILD|ES_WANTRETURN|ES_AUTOVSCROLL|ES_MULTILINE, 80,110,100,80,(HMENU)IDE_EDIT01}
};

//--- WM_CREATE :for(int i = 0; i < ctrlNum; i++){  CreateCtrl(ctrlParams[i]);}

2. 关于dwStyle参数

控件的dwStyle参数有两层,WS_ 开头的表示窗口类型,其它的BS_, ES_,LBS_ 等等表示控件特有的类型。

WS_VISIBLE 表示可见,如果没有,则控件是隐藏的。可以在程序中动态改变:

//------ 设窗口或控件可见 ----
ShowWindow(ctrlParams[0].hCtrl, SW_SHOWNOMAL);

WS_CHILD 用于控件的创建,与hWnd配合,确定它的父窗口,位置参数x, y, width, height 都是相对于父窗口的;

WS_DISABLED 创建的窗口或控件不可用,也可以动态改变:

//----- 这里不能用 SendMessage(.., WM_ENABLE, ..); -------//----- 后果是控件灰色去掉,但控件仍然不可用  -----------EnableWindow(ctrlparams[0].hCtl, TRUE);

WS_GROUP 主要用于edit的tab键功能。作用域:一个WS_GROUP到下一个WS_GROUP之前,中间不能再有。

WS_BORDER 加边框。如果需要其它边框可以用CreateWindowEx, 多了一个参数即第一个参数, 以WS_EX_ 开头的 EDGE 结尾的 WS_EX_CLIENTEDGE 等等。

其它的查MSDN,不再赘述。

(1). edit控件:

ES_AUTOHSCROLL 和 ES_AUTOVSCROLL 当横向和纵向输入超过宽或高,则自动出现滑动条;可以不用WS_VSCORLL 和 WS_HSCORLL;

ES_MULTILINE 可支持多行;

ES_WANTRETURN 键入回车或程序输出 '\n' 时换行,必须与 ES_MULTILINE 组合;不选则不接受换行,直到行尾;

ES_READONLY 有些可视化编辑器也称 Lock,选择后不可键盘输入,但可以用 WM_SETTEXT 程序输出;

//------ TRUE 表示 LOCK    ---------//-------FALSE 表示 UNLOCK   ----------SendMessage(ctrlParams[1].hCtrl, EM_SETREADONLY, TRUE, 0);

//-------- 获取 edit 的内容 ----------------SendMessage(hCtrl, WM_GETTEXT, (WPARAM)lenth, (LPARAM)buf);

//------- 设置 edit 的内容,有字符长度限制,一般为 1kB ------------------SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM)buf);

//------ 选中字符 nStart 和 nEnd 可以相等 --------SendMessage(hCtrl, EM_GETSEL, (WPARAM)nStart, (LPARAM)nEnd);//------ 可以让 nStart = -1 选中末尾,然后在末尾添加字符  ----------SendMessage(hCtrl, EM_REPLACESEL, 0, buf);

(2). listbox 控件:

LBS_NOTIFY 可以在主窗口接收到鼠标单击和双击 一个 list item 的消息;

LBS_MULTIPLESEL 可多选;

case WM_COOMAND:  switch(HIWORD(wParam))  {case LBN_DBLCLK:break;case LBN_SELCHANGE:break;default: break;}

//----- 添加一个 item --------index = SendMessage(hCtrl, LB_ADDSTRING, 0, lpName);//----- 删除一个 item --------SendMessage(hCtrl, LB_DELETESTRING, selIndex, 0);

//----- 选中一个 item --------SendMessage(hCtrl, LB_SETCURSEL, index, 0);//----- 获取选中的 item index --------index = SendMessage(hCtrl, LB_GETCURSEL, 0, 0);//--- 注意: 在 LBS_MULTIPLESEL 下使用 LB_SETSEL 和 LB_GETSEL

3.  位置大小信息

  Windows窗口用一个RECT结构体表示它的位置和大小,当窗口边界拖动后会产生一个WM_SIZE消息。

//----- 获取窗口或控件的位置和大小 ----GetWindowRect(hWnd, &rect);//---- 设置 .... ---SetWindowPos(hwnd, HAND_TOPMOST, x, y, width, height, SWP_NOZORDER);//--- GetWindowRect 得到的是起始坐标终止坐标//----- 而 SetWindowPos 使用的是起始坐标长宽,这里的坐标都是相对于各自的父窗口

posted on 2015-04-28 17:46 木无亡法 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/mwwf-blogs/p/4463034.html

win32 控件的创建和消息响应相关推荐

  1. VC程序中实现控件的动态生成与响应

    动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...

  2. EasyX 如何使用 Win32 控件

    EasyX 原本是用不了 Win32 控件的,但是可以用 hieasyx,一个基于 EasyX 的扩展库,这个库的 github 链接是: https://github.com/zouhuidong/ ...

  3. C#控件的创建、属性设置及事件注册

    摘要:本文基于Visual studio 2019, 以按钮控件(Button)为例,认识控件的创建方式.属性设置及事件注册. 编程语言:C# 编程环境:Visual Studio 2019 目录 控 ...

  4. Win32 GUI编程之二-------------使用Win32控件(ListView)

    // Windows 头文件: #include <windows.h>// C 运行时头文件 #include <stdlib.h> #include <malloc. ...

  5. ASP.NET用户控件的创建和使用

    ASP.NET用户控件的创建和使用 1. Web用户控件概述 Web用户控件是一种服务器控件,它与ASP.NET页面有着同样的所见即所得的特点,并以.ascx为扩展名存储为文本文件,同样具有自己的界面 ...

  6. 设置断点检测控件何时创建和析构

    Created by Jerry Wang, last modified on Aug 20, 2015 mElements deregister Element 切换到debug mode, 从如下 ...

  7. 加速浏览器控件的创建

    加速浏览器控件的创建 我们知道,应用程序中浏览器控件的第一个实例的创建过程比其他的实例创建过程慢得多.为了加速浏览器控件的创建,在应用程序的开始,可以创建一个隐藏的浏览器对象,使得应用程序中随时都至少 ...

  8. AlphaControls 控件 TsFrameBar 创建下拉式多级导航菜单

    AlphaControls 控件 TsFrameBar 创建下拉式多级导航菜单 TsFrameBar控件是创建一个下拉菜单的工具块.     TsFrameBar控件本身,可以通过创建TITEMS,自 ...

  9. Win32使用Windows公共控件库创建工具条

    Win32程序创建工具条,需要使用Windows公共控件库,是另一个DLL:本身Win32 API 是在系统自带的3个DLL: Win7,CFree 5.0:运行结果: 引入lib文件的设置如下: 如 ...

最新文章

  1. 使用python套用excel模板_集成python的excel插件模板pyaddin——使用说明
  2. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
  3. JQ属性和css部分测试
  4. php怎么自定义设置打印区域,JavaScript_jQuery实现区域打印功能代码详解,使用CSS控制打印样式,需要设 - phpStudy...
  5. js设置select列表中特定项为选中状态
  6. MySQL数据库设置主从同步
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理学原理★10013k1
  8. 采集gpu_GPU是怎么处理游戏画面?一文看懂显卡的工作原理,原来这么简单
  9. Java不修改尺寸压缩图片
  10. 测试前景分析-来自《Goolgle测试之道》
  11. C# 操作Word文本框——插入图片、表格、文字、超链接等
  12. c语言乘方程序,C语言求幂计算的高效解法
  13. InstallShield Professional,开发解决方案
  14. c语言双目运算和单目运算符,单目运算符 双目运算符 三目运算符
  15. python 期货现货差价监测_现货价格和期货价格的关系怎么看?
  16. 【PS插件】Retouch4me 10合1一键安装版
  17. Python——列表与元组
  18. 【医学影像系列:二】眼底图像数据集整理(糖尿病视网膜病变/青光眼...)
  19. Skill: win10: 开机启动项管理配置
  20. 基于GeoTools的GeoJson导入到PostGis实战

热门文章

  1. windows media services 2008外网无法访问
  2. 多数据源处理-苞米豆-dynamic
  3. 用宝塔本地搭建php,Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)...
  4. java要频繁调用容器时_Java知识点梳理
  5. java中Object和Objects类、toString方法和equals方法介绍
  6. 微信小程序中app.js文件、组件、api
  7. vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画
  8. linux简单几个小命令
  9. 被骂后,才知道找的年终总结模板都是错的
  10. 互联网日报 | 2月23日 星期二 | 华为发布新一代折叠旗舰Mate X2;字节跳动游戏官网正式上线;携程设立轮值制度...