Wince 对话框程序设计

简介:   如何编程实现wince下“打开文件夹对话框”呢?这里就要涉及到下面要分析的知识了,对话框是一种特殊的窗口,它在wince 作为应用程序和程序使用者之间的交流窗口,通过显示和获取信息使人们的交流更加方便,这里先介绍下wParam和lParam,对于鼠标而言,LOWORD(wParam)和HIWORD(wParam)代表鼠标位置x,y坐标;对于菜单和控件而言,两者wParam的低字节都是各自的ID,即LOWORD(wParam)都是ID。

  如何编程实现wince下“打开文件夹对话框”呢?这里就要涉及到下面要分析的知识了,对话框是一种特殊的窗口,它在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种显示标准,如下:

 

*对话框消息处理

 对话框过程处理函数格式为:

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));
相关文章
数字逻辑基础:原码、反码、补码
数字逻辑基础:原码、反码、补码
316 0
|
7天前
|
人工智能 运维 安全
|
5天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
608 21
|
12天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
970 110
|
6天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。