用C++实现windowsMobile5.0上的UIControl开发
Eddy_0825,2007.5.25
翻译原文见后面:(英文不是很溜,欢迎指正,msn:[email protected]. QQ:83279521
简介:
随着Visual Studio2005的发布,PPC和Smartphone的智能设备开发人员终于可以用统一的工具来开发smart device桌面程序了。
对于习惯用C#或者VB.NET开发智能设备的程序员,Visual Studio2005的RAD(Rapid 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 内容改变。
通过windows的WM_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