1.预定义对话框(由系统提供)
InputBox()
MsgBox() //使用时要知道参数的含义
2.自定义对话框(定制对话框)
3.通用对话框(系统提供的Active X插件) ----运行时不可见,通用对话框对象允许在程序中显示6种显示标准,如下:
*对话框消息处理
对话框过程处理函数格式为:
1 BOOL CALLBACK DialogProc(
2 HWND hwndDlg,
3 UINT uMsg,
4 WPARAM wParam,
5 LPARAM lParam
6 );
返回值是TURE和FALSE,是BOOL类型。在windows头文件里是int类型。
窗口过程处理函数格式为:
1 LRESULT CALLBACK ProcWinMain( HWND hWnd,
2 UINT Msg,
3 WPARAM wParam,
4 LPARAM lParam
5 );
返回值是LRESULT。
*创建对话框
下面介绍一种对话框产生的方法:(把对话框当作窗口来处理)
RegisterClassEx函数把对话框模板注册为一个窗口类,然后创建一个由该窗口类派生的窗口。修改的地方是stdWndClass.cbWndExtra,原本都是NULL,现在改成DLGWINDOWEXTRA。如下
1 stdWndClass.cbWndExtra = DLGWINDOWEXTRA;
2 stdWndClass.lpszClassName = ClassName;
3 stdWndClass.cbClsExtra = NULL;
这里要注意stdWndClass.lpszClassName对应的是窗口类的名字。这样才能把对话框当作是窗口进行处理。
改好之后照常调用函数RegisterClassEx注册窗口类
接着就是hDlg=CreateDialogParam(hInstance,DlgName,NULL,NULL,NULL);
非模态对话框对消息的处理都是要进过程序的消息队列的,也就是处理的时候都是要进过程序窗口过程的处理。
最后就是在消息循环里面的改进:(IsDialogMessage判断消息是否为对话框消息,用CreateDialogParam创建非模式对话框则需要)
1 while(GetMessage(&stMsg,NULL,0,0)) 2 { 3 4 if(!IsDialogMessage(hDlg,&stMsg)) 5 { 6 7 TranslateMessage(&stMsg); 8 DispatchMessage(&stMsg); 9 10 } 11 }
那么讲到最初的问题起点,如何编程实现wince下“打开文件夹对话框”呢?最后的代码如下:
1 BROWSEINFO bi; 2 memset(&bi, 0, sizeof(BROWSEINFO) ); 3 LPITEMIDLIST idl=SHBrowseForFolder(&bi); 4 if(idl==NULL) return; 5 SHGetPathFromIDList(idl,strFilePath.GetBuffer(MAX_PATH));
作者: 李肖遥, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3912462.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论