• Wince 对话框程序设计


      如何编程实现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));
  • 相关阅读:
    JSON.stringify()学习
    【EntityFramework学习笔记】为什么要使用迁移
    使用Telerik的DataPager进行服务器端分页(改进版)
    使用Telerik的DataPager进行服务器端分页
    使用MVVM写的WPF分页控件
    【PostgreSQL】PostgreSQL的安装
    【Telerik】<telerik:RadGridView/>控件的使用
    【PostgreSQL】PostGreSQL数据库,时间数据类型
    WCF的同步和异步(以WPF连接为例)
    【WPF】绑定数据
  • 原文地址:https://www.cnblogs.com/lihuidashen/p/4231188.html
Copyright © 2020-2023  润新知