自己对DialogBox的封装 [转]
来源:互联网 发布:windows 10 whql是什么 编辑:程序博客网 时间:2024/05/05 22:22
Smartphone上的DialogBox非得用modal dialog,而且,Parent Wnd Handle必须是NULL。封装的时候,把this用Set/GetWindowLong来存取,还好。还有,如果想不给LoadString一个有效的Buffer,直接得到资源字符串的静态地址,需要老老实实的给资源编译器加-n参数。
=================
头文件:
=================
#pragma once
#include <windows.h>
class CMyDialogBox
{
public:
CMyDialogBox(WORD wResID, UINT uMenuID, LPCTSTR szTitle);
public:
virtual ~CMyDialogBox(void);
public:
int ShowModalDialog(HINSTANCE hInst, HWND hwndParent);
protected:
WORD m_wResID;
static BOOL DialogFunc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
virtual BOOL InitDialog(HWND hwnd);
HWND m_hwnd;
HINSTANCE m_hInstance;
UINT m_uMenuID;
HWND m_hwndMenu;
LPCTSTR m_szTitle;
virtual BOOL InitComponents(void) = 0;
virtual BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtrl) = 0;
};
==================
源文件:
==================
#include "StdAfx.h"
#include "MyDialogBox.h"
#include <tpcshell.h>
#pragma comment(lib, "aygshell.lib")
CMyDialogBox::CMyDialogBox(WORD wResID, UINT uMenuID, LPCTSTR szTitle)
: m_uMenuID(0)
{
this->m_wResID = wResID;
this->m_uMenuID = uMenuID;
this->m_szTitle = szTitle;
}
CMyDialogBox::~CMyDialogBox(void)
{
}
int CMyDialogBox::ShowModalDialog(HINSTANCE hInst, HWND hwndParent)
{
this->m_hInstance = hInst;
return DialogBoxParam(
hInst,
MAKEINTRESOURCE(m_wResID),
hwndParent,
DialogFunc,
(LPARAM)this);
}
BOOL CMyDialogBox::DialogFunc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
BOOL bProcessedMsg = TRUE;
CMyDialogBox * this_ptr = (CMyDialogBox *) GetWindowLong(hWnd, DWL_USER);
switch (Msg) {
case WM_HOTKEY:
if(HIWORD(lParam) == VK_TBACK)
SHSendBackToFocusWindow(Msg, wParam, lParam);
break;
case WM_INITDIALOG:
this_ptr = (CMyDialogBox *) lParam;
SetWindowLong(hWnd, DWL_USER, (LONG) this_ptr);
if (FALSE == this_ptr->InitDialog(hWnd)) {
EndDialog(hWnd, -1);
}
break;
case WM_ACTIVATE:
if (WA_INACTIVE != LOWORD(wParam)) {
SetFocus(hWnd);
}
break;
case WM_CLOSE:
EndDialog(hWnd, 0);
break;
case WM_COMMAND:
bProcessedMsg = this_ptr->OnCommand(
HIWORD(wParam),
LOWORD(wParam),
(HWND) lParam);
break;
default:
bProcessedMsg = FALSE;
}
return bProcessedMsg;
}
BOOL CMyDialogBox::InitDialog(HWND hWnd)
{
this->m_hwnd = hWnd;
// initialize dialog box, specifying that it should stretch full screen
SHINITDLGINFO sid;
ZeroMemory(&sid, sizeof(sid));
sid.dwMask = SHIDIM_FLAGS;
sid.dwFlags = SHIDIF_SIZEDLGFULLSCREEN;
sid.hDlg = hWnd;
// initialize menubar
SHMENUBARINFO mbi;
ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = this->m_uMenuID;
mbi.hInstRes = this->m_hInstance;
if (FALSE == SHCreateMenuBar(&mbi)) {
return FALSE;
}
this->m_hwndMenu = mbi.hwndMB;
// initialize the dialog
if (FALSE == SHInitDialog(&sid)) {
return FALSE;
}
// show menubar
ShowWindow(this->m_hwndMenu, SW_SHOW);
// override back-key
SendMessage(this->m_hwndMenu, SHCMBM_OVERRIDEKEY, VK_TBACK,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
// set the title bar
SetWindowText(hWnd, this->m_szTitle);
return this->InitComponents();
}
come from: http://richarddzh.blog.163.com/blog/static/112179155200941625141729/
- 自己对DialogBox的封装 [转]
- CRange 的dialogbox()
- 关于DialogBox的使用
- DialogBox
- 自己对volley http模块的二次封装的使用
- 对自己的“平均随机数封装类”的测试
- DialogBox的定义以及使用
- 自己封装的ajax
- 自己封装的泛型链表
- 封装自己的Framwork
- 封装自己的理解
- 自己封装的ajax
- MapList 自己封装的
- 封装自己的printf
- 自己封装的轮播图
- 封装自己的jquery
- 对UNIXODBC的封装
- 对数据库的封装
- SetWindowLongPtr和GetWindowLongPtr函数
- Struts1.x 国际化
- C语言里面的嵌套声明的读法
- 子类化实现DialogBox中Edit控件的WM_CHAR消息
- 修改端口
- 自己对DialogBox的封装 [转]
- kmalloc详解
- 很高兴建立了博客
- Delphi编译指令====收藏转帖
- JavaScript在IE和Firefox之间的差异
- 六十星系之58太阳巨门坐寅申
- VS.net配合VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。
- 使用request.getHeader("Referer");得到请求的来源
- display用法相关