Win32 common control(Statusbar)

common control 发送notification 到父窗口,当事件发生时。这是通用控件的设计方法!

common control也是窗口,也就有window class,也能使用一般的窗口函数处理他们。

一些发送WM_COMMAND消息给父窗口,一些但是使用WM_NOTIFY来通知父窗口

代码如:
//子控件发送WM_COMMAND,而在父窗口处理函数中处理他们,为什么他们不给自己的窗口处理函数呢?
      case WM_COMMAND:
           do.....
           break;


使用common control,要包含commctrl.h和使用comctl32.lib,在你调用任何在comctl32.dll中的函数,使用
InitCommonControls(Ex)来确保dll被加载。

InitCommonControls 做的事情,我猜测,在DllMain中注册这个dll中的window class


创建common control使用CreateWindow(Ex)或是使用对话框模版(也可以将对话框设为style:Child/Border:No来避免使用CreateWindow(Ex)动态创建)

common control的类别
c在commctrl.h中定义,MFC在AFXCMN.H中定义.

ANIMATE_CLASS
HOTKEY_CLASS
PROGRESS_CLASS
STATUSCLASSNAME
TOOLBARCLASSNAME
TOOLTIPS_CLASS
TRACKBAR_CLASS
UPDOWN_CLASS
WC_HEADER
WC_LISTVIEW
WC_TABCONTROL
WC_TREEVIEW

common control的style
CCS_ADJUSTABLE
CCS_BOTTOM
CCS_TOP
CCS_NORESIZE
CCS_NOMOVEY
CCS_NOPARENTALIGN
CCS_NODIVIDER
CCS_NOHILITE

common control的Notificatiions,以NM_*开始
   NM_*用来通知他的父窗口的,有什么事情发生了,并不是有自己处理,因为他的类别是系统注册的,不知道其中的pfnWndProc,但是可以使用subclass或superclass来改变pfnWndProc
   lParam包含NMHDR结构或是包含NMHDR结构的结构
typedef struct _nmhdr
{
 HWND hwndFrom;  //告诉父窗口这个notification的来源窗口
 UINT idFrom;
 UINT code;
} NMHDR;


但是大多数通用控件都可以发送以下notification
NM_CLICK
NM_DBLCLK
NM_KILLFOCUS
NM_RCLICK
NM_RDBLCLK
NM_RETURN
NM_SETFOCUS
例如,我在TreeControl上双击了,那么就有NM_DBLCLK,被通知到他的父窗口,也就是我的程序!我的处理
case WM_NOTIFY:
    switch(code){
        case NM_DBLCLK:
           ....
        break;
    }
    break;


正式开始:common control 学习
organizational controls:
是指status bars   toolbars

status bars
window class:STATUSCLASSNAME
注意:他不在对话框设计器中,也就是说不能画出来,只能用代码建立!
创建方法:
1.HWND hwndStatus=CreateWindowEx(...,STATUSCLASSNAME,...);
2.CreateStatusWindow
3.CStatusBar
4.CStatusBarCtrl

其中CreateStatusWindow的参数
style,wID,hwndParent比较重要
 
调用系统注册类别的pfnWndProc函数,使用SendMessage
想要让status bars调整大小,那么调用其消息处理器来处理WM_SIZE,或我们自己处理,但是我们自己处理麻烦,直接使用SendMessage(hwnd,WM_SIZE,...)来调用消息处理器来处理WM_SIZE消息
示例工程连接:

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值