Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21040
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-12 20:05
文章分类
文章存档

2015年(3)

2014年(1)

我的朋友
最近访客

分类: 嵌入式

2015-01-11 21:24:58

  对话框时一种特殊的窗口,它在wince 作为应用程序和程序使用者之间的交流窗口,通过显示和获取信息使人们的交流更加方便,这里先介绍下wParam和lParam,对于鼠标而言,LOWORD(wParam)和HIWORD(wParam)代表鼠标位置x,y坐标,对于菜单和控件而言,两者wParam的低字节都是各自的ID,即LOWORD(wParam)都是ID。两者的高字节对菜单而言是0,对控件而言是消息码(消息码也可能是0)所以不能单凭wParam参数来判断消息是来自于菜单还是来自于控件,但是可以通过lParam来判断,对于菜单而言lParam恒为0,而对于控件而言却是子窗口句柄。

  其结构和对话框类似,分为三种:

1.预定义对话框(由系统提供)

  InputBox()

  MsgBox()                         使用时要知道参数的含义

2.自定义对话框(定制对话框)

3.通用对话框(系统提供的Active X插件)  ----运行时不可见,通用对话框对象允许在程序中显示6种显示标准,如下:

 

*对话框消息处理

对话框过程处理函数格式为: BOOL CALLBACK DialogProc(               
        HWND hwndDlg,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
);返回值是TURE和FALSE,是BOOL类型。在windows头文件里是int类型。
窗口过程处理函数格式为:LRESULT CALLBACK ProcWinMain(   HWND hWnd, 
    UINT Msg, 
    WPARAM wParam, 
    LPARAM lParam 
);返回值是LRESULT。

 

*创建对话框

下面介绍一种对话框产生的方法:(把对话框当作窗口来处理)

RegisterClassEx函数把对话框模板注册为一个窗口类,然后创建一个由该窗口类派生的窗口。修改的地方是stdWndClass.cbWndExtra,原本都是NULL,现在改成DLGWINDOWEXTRA。如下

 stdWndClass.cbWndExtra = DLGWINDOWEXTRA;
 stdWndClass.lpszClassName = ClassName;
 stdWndClass.cbClsExtra = NULL;

这里要注意stdWndClass.lpszClassName对应的是窗口类的名字。这样才能把对话框当作是窗口进行处理。
改好之后照常调用函数RegisterClassEx注册窗口类
接着就是hDlg=CreateDialogParam(hInstance,DlgName,NULL,NULL,NULL);
非模态对话框对消息的处理都是要进过程序的消息队列的,也就是处理的时候都是要进过程序窗口过程的处理。

最后就是在消息循环里面的改进:(IsDialogMessage判断消息是否为对话框消息,用CreateDialogParam创建非模式对话框则需要)

 while(GetMessage(&stMsg,NULL,0,0))
 {
         if(

!IsDialogMessage(hDlg,&stMsg)

)

        {
                 TranslateMessage(&stMsg);
                  DispatchMessage(&stMsg);
         }
 }

阅读(1686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~