Win32对话框中使用Tab控件

本文介绍了在Win32对话框中使用Tab控件的步骤和遇到的问题,包括如何创建和绑定子对话框,以及在用户切换Tab时显示相应内容的实现。在初始化过程中,通过结构体DLGHDR描述Tab和子对话框的关系,并在WM_INITDIALOG消息处理中设置。尽管存在子对话框位置不随父对话框移动的bug,但整个过程强调了阅读官方文档的重要性。
摘要由CSDN通过智能技术生成

windows编程学习任重而道远。一个tab控件折腾好久才勉强能用,还有好多问题存在。暂且将已经实现的记录下来。

首先,初学windows编程,就算知道了一个控件的所有信息,没有示例,学起来也是很迷茫的。msdn官网方文档中有一个叫using...的模块,很有帮助。

就像上方所示,参考using tab controls中的示例代码,能让初学者在使用控件的时候省力不少。

tab控件在dialog和window中的使用方法不同。常规操作中,在window中,为tab的每一页创建或绑定一个子window,而在对话框的使用中,为tab的每一页绑定一个子对话框。

笔者编写的是基于对话框的程序,所以需要为每一页绑定一个子对话框。

依据官方文档给出的做法,首先定义一个struct,用以存储tab的信息。

#define C_PAGES 3 

typedef struct tag_dlghdr { 
    HWND hwndTab;       // tab control 
    HWND hwndDisplay;   // current child dialog box 
    RECT rcDisplay;     // display rectangle for the tab control 
    DLGTEMPLATEEX *apRes[C_PAGES]; 
} DLGHDR; 

struct中的各项定义的含义代码后面的注释已经给出,相当清除,此处不再赘述。

但笔者在使用的时候出现了一个问题。就是找不到DLGTEMPLATEEX的头文件,不知要引入何种头文件才能使用它。在网上搜寻了一番也无果。最后还是看文档中给出的说法解了疑惑。这里说明认真阅读官方文档是很重要的一件事,很多东西人家都说的很清楚了,不去仔细看却到网上一通乱找,及其浪费时间。

DLGTEMPLATEEX结构体用以描述扩展对话框,并且指定其控件个数。在官方文档中有这样一句话:The DLGTEMPLATEEX structure is not defined in any standard header file. 

即它不在标准库中定义。至于其在哪里定义,网上似乎有些线索,不过俺没搜出来。笔者的做法是自己将该结构体定义出来。

typedef struct {
  WORD      dlgVer;
  WORD      signature;
  DWORD     helpID;
  DWORD     exStyle;
  DWORD     style;
  WORD      cDlgItems;
  short     x;
  short     y;
  short     cx;
  short     cy;
  sz_Or_Ord menu;
  sz_Or_Ord windowClass;
  WCHAR     title[titleLen];
  WORD      pointsize;
  WORD      weight;
  BYTE      italic;
  BYTE      charset;
  WCHAR     typeface[stringLen];
} DLGTEMPLATEEX;

这样结构体就不缺了。本来以为之后就可以快快乐乐地进行下一步了,却发现sz_Or_Ord并非一个标准文档中的类型,该类型在哪里定义,或是其是何含义,皆不知道。在官网上找,只知道其为16位元素组成的可变长度的数组。一通搜索,发现有位仁兄如此定义:

#define sz_Or_Ord WORD

很有效,可以使用。并且在结构体定义的其他变量中,此方法也很适用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值