C++实现windowsMobile5.0上的UIControl开发

来源:互联网 发布:java输出语句错误 编辑:程序博客网 时间:2024/06/11 02:48

C++实现windowsMobile5.0上的UIControl开发

                                             Eddy_08252007.5.25

翻译原文见后面:(英文不是很溜,欢迎指正,msn:songyl0825@hotmail.com. QQ:83279521

简介:

随着Visual Studio2005的发布,PPCSmartphone的智能设备开发人员终于可以用统一的工具来开发smart device桌面程序了。

对于习惯用C#或者VB.NET开发智能设备的程序员,Visual Studio2005RADRapid Application Development)会有相当的吸引力,极其方便的是当你双击从工具栏中拽出的控制按钮时,它能自动的把句柄代码加到程序中去。

对于C++开发者来说,改进并不是很智能,c++开发者注重灵活性,因此需要额外的代码来生成与处理设置。

本文讲解关于如何创建对话框与控制的应用程序,主要是创建对话框与控制时所用到的代码,作者还简单介绍了智能平台下控制键的创建。

创建工程:

   If you've never tried to add controls in C++, it can be confusing. By default, C++ does not offer a pretty graphical editor for your controls. You can manually create the information that the program needs to display a control by creating a resource file. A simpler way to start is not with a button or textbox control, but by creating a dialog box.

创建对话框:

   建立好工程后,创建对话框步骤如下:

1. 打开资源视图(Resource View

2.  右击工程名》选择“添加”》选择“资源”;显示如下的对话框:

3. 扩展对话框(dialog)》选择“IDD_SMARTPHONE_PORTRAIT”》单击“新建”,出现下面的对话框:

  

  现在,你可以从左面的对话框编辑器从为右面的对话框选择控件了。Very easy!

 4 . 生成控件:

   我们选择read-only edit control, and a check box,组成第一个简单的UI;如下图所示:

  

5        添加代码,完成下面两个功能:

第一:程序运行时,显示新的对话框

第二:点击check box , the edit box 内容改变。

 通过windowsWM_CREATE消息句柄来打开对话框是最佳选择。

程序开始执行代码如下:

#include "stdafx.h"

#include "dialog.h"

#include <windows.h>

#include <commctrl.h>

#include "resourcesp.h"

 

#define MAX_LOADSTRING 100

// 全局变量:

HINSTANCE                g_hInst;                // 当前实例

HWND                         g_hWndMenuBar;         // 菜单栏句柄

 

// 此代码模块中包含的函数的前向声明:

ATOM                  MyRegisterClass(HINSTANCE, LPTSTR);

BOOL                   InitInstance(HINSTANCE, int);

LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);

//添加的代码

LRESULT CALLBACK    MyDialogProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   LPTSTR    lpCmdLine,

                   int       nCmdShow)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

MyDialogProc()函数实现如下:

LRESULT CALLBACK    MyDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

    switch(message)

     {

       case WM_INITDIALOG:

           return true;

     }

      return false;

}

 WM_CREATE句柄里面加入下面代码:

DialogBox(g_hInst, MAKEINTRESOURCE(IDD_SMARTPHONE_PORTRAIT), hWnd,
 (DLGPROC)MyDialogProc

现在可以编译运行程序,模拟器上结果如下:

注意:上面的对话框并没有全频显示,如果想全频显示,需要调用函数:SHInitDialog

详细代码如下所示:

LRESULT CALLBACK MyDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 
     SHINITDLGINFO shido;
      
    switch (message)
    {
 
         case WM_INITDIALOG:
             ZeroMemory(&shido, sizeof(shido));
             shido.dwMask = SHIDIM_FLAGS;
             shido.dwFlags = SHIDIF_SIZEDLGFULLSCREEN;
             shido.hDlg = hDlg;
             if (!SHInitDialog(&shido))
                 return false;
             return true;
           
            break;
     }
    return false;
}

再编译运行,模拟器显示如下:(已经全频显示了)

 

第一个功能已经完成,下面主要是:控件响应。

控件需要发送与接收信息,因此程序需要控制关于控件的消息并将更新消息传给编器,代码如下:

case WM_COMMAND:
 
wmId    = LOWORD(wParam);
       wmEvent = HIWORD(wParam);
         
       switch (wmId)
       {
            case IDC_CHECK1:    // This message is sent by the check
// box.
         if (wmEvent == BN_CLICKED)    // And it's the click message.
         {
         // Get current state of the check box.
         if (SendDlgItemMessage(hDlg,IDC_CHECK1,BM_GETCHECK,0,0)==1)
             // It's now checked.
SendDlgItemMessage(hDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)L"Check box is
ON");
         else
             // It's now unchecked.
             SendDlgItemMessage(hDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)L"Check box is
OFF");
}
           
       break;
   }

 

原文如下连接:

http://tech.itdb.cn/n/200609/27/n20060927_74110.shtml