window基础编程 - 对话框和子控件

前言

  • 之前说的资源几乎都是被动拿来使用的,除了少数我们发消息过去用来改变这块资源,我们都是接收消息来处理具体的行为。
  • 对话框和子控件都属于窗口资源,它们更多的行为表现在与父窗口的通信中,也就是更多的消息交互而不再只是被动的处理。

对话框 DIALOG

  • 对话框是一种资源,可以在.rc中创建对话框,并获得其ID资源号,实际使用过程中有两种方法。
  • 对话框同时是一种窗口,这个窗口类是系统定义好的,所以它的回调函数也是系统定义好的,我们只需创建(非CreateWindow),并在创建过程中传递一个子回调函数处理对应的消息即可。
  • 对话框可以调用DialogBox函数使用,这将和MessageBox一样产生阻塞,函数参数最后一个传递的便是自定义的消息处理子函数,想退出阻塞关闭对话框必须使用EndDialog函数。
  • 对话框还可以调用CreateDialog函数,该函数和DialogBox参数一致,也需要传递自定义的消息处理函数,同时还要调用ShowWindow该对话框才能看的见,但该对话框属于非阻塞模式,它不会产生阻塞。调用DestroyWindow关闭该对话框并释放资源,如果这里使用EndDialog是不会释放窗口资源的。
  • 以上两种调用方式均会产生WM_INITDIALOG消息,它产生于对话框创建成功和显示之前,和WM_CREATE消息一个意思,但此处不会产生WM_CREATE消息。
  • 具体系统默认的回调函数大致如下:
    ”’
    LRESULT CALLBACK VirtualProc(..){
    ….
    if(MyProc(…)){
    }

    }
    ”’
    假设系统定义的对话框其回调函数是VirtualProc,而MyProc则是我们传递的回调函数 系统会在调用它的消息处理函数时判断我们的处理函数,如果返回值是TRUE,则不执行后续默认的处理方式,若MyProc返回值是FALSE,则会按后续默认的处理方式处理消息。

子控件

  • 子控件也属于窗口类,并且是系统定义好的窗口类,我们只需在CreateWindow/Ex函数时指定使用哪些子控件即可,并且回调函数也是系统定义好的。
  • 子控件更多的意思在于和父窗口的交互,所以它们的消息经常是双向的,除了处理接收的消息外,我们更多的需要调用SendMessage函数来获得子控件的状态,这里先讨论静态框,按钮和编辑框3个子控件。
  • 使用函数CreateWindow/Ex创建需要的子控件,窗口类型指明是哪一类子控件,并且在MenuName自己定义该控件ID(需加HMENU类型转换)。
  • 子控件和父窗口的消息交互大致如下

    父窗口(发送) SendMessage———> 控件窗口
    父窗口(处理) <———WM_COMMAND 控件窗口

  • WM_COMMAND消息的完整定义如下,按能产生该消息的3类划分
参数类表菜单项加速键子控件
WPARAM(LOWORD)IDIDID
WPARAM(HIWORD)01Notify-Code
LPARAMNULLNULL控件窗口句柄

静态框 STATIC

静态框分为文字和图像(ICON,BITMAP)两种,它几乎只是在窗口中贴出想要展示的文字或图片。
  • 在CreateWindow/Ex中指明类型为STATIC,如果是文字,窗口名即是想显示的字符,如果是图片,需要在窗口名中放入”#$ID”格式字符,其中ID是图标或位图的ID数值,该数值需要从resoure.h头文件中查找。
  • 想要接收的WM_COMMAND消息,需设定窗口类型风格SS_NOTIFY(因为静态框比较特别,一般不需产生该消息),这样就可以去该消息的(HIWORD)WPARAM是否是以STN_为首的宏消息信息。
  • 可以发送的消息以STM_为首的宏,比如可以发送STM_SETICON改变显示的图标。

按钮 BUTTON

  • 在CreateWindow/Ex指明窗口类为BUTTON就可以创建按钮控件,在风格时可以指明4种的按钮类型:

    BS_PUSHBUTTON 典型的下压按钮
    BS_GROUPBOX 分组按钮,一般用于控件显示上分组加以区分
    BS_CHECKBOX / BS_3STATE 复选按钮,双态和三态的
    BS_RADIOBUTTON 单选按钮

  • 4中类型的按钮对应不同的作用,最后两种按钮可以指明AUTO风格,这样在点击后会自动切换按钮状态,否则需要手动发送消息BM_SETCHECK来改变你想要的按钮状态(通过BN_CLICKED这个Notify-Code)来判断是否有点击。

  • 第四种单选按钮可以在创建时添加WS_GROUP风格为其分组。

编辑框 EDIT

  • 在CreateWindow/EX时指定类型为EDIT可以创建编辑框,用于输入文本信息。
  • 风格处可以指定文本框风格,ES_MULTILINE(可写多行),ES_AUTOHSROLL,ES_AUTOVSROLL(水平垂直可扩展)等是常用的风格。同时还可添加WS_ HSROLL为其增加滚动条。
  • 通常判断WM_COMMAND中Notify-Code是否为EN_CHANGE来判断编辑框有无文本改动。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值