Windows Mobile下如何去掉WTL对话框CStdDialogImpl的OK按钮

简介:

简介

本文讲述如何去掉WTL对话框的右上角的OK按钮。

 

问题

继承于CStdDialogImpl类的对话框默认是有一个OK按钮在右上角的。如下图

wtl_menu2

为什么会有这个OK按钮呢,因为模拟生产的代码是继承于CStdDialogImpl<CConfigDialog>,CConfigDialog为自定义的类。

class CConfigDialog : public CStdDialogImpl<CConfigDialog>, 
    public CWinDataExchange<CConfigDialog>
{
public:
BEGIN_MSG_MAP(CConfigDialog)
CHAIN_MSG_MAP(CStdDialogImpl<CConfigDialog>)
END_MSG_MAP()

 

而CStdDialogImpl继承于CStdDialogImplBase,默认shidi flags 是WTL_STD_SHIDIF

template <class T, UINT t_shidiFlags = WTL_STD_SHIDIF, bool t_bModal = true >
class ATL_NO_VTABLE CStdDialogImpl : public CStdDialogImplBase< T, t_shidiFlags, t_bModal>
{};

WTL_STD_SHIDIF包含了SHIDIF_DONEBUTTON。

#define WTL_STD_SHIDIF   SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN

SHIDIF_DONEBUTTON就是右上角显示的OK按钮。

 

 

实现

要把这个按钮去掉,有以下步骤。

 

1. 修改CConfigDialog 的继承,继承自CStdDialogImpl<CConfigDialog, SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_SIPDOWN>

class CConfigDialog : public CStdDialogImpl<CConfigDialog, SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_SIPDOWN>,
public CWinDataExchange<CConfigDialog>
{
public: 
typedef CStdDialogImpl<CConfigDialog, SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_SIPDOWN> CConfigDialogWithoutDone;

BEGIN_MSG_MAP(CConfigDialog)
CHAIN_MSG_MAP(CConfigDialogWithoutDone)
END_MSG_MAP()

同时需要修改CHAIN_MSG_MAP。

2.在OnInitDialog()函数增加SHDoneButton和ModifyStyle的调用。

LRESULT CConfigDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SHDoneButton(m_hWnd, SHDB_HIDE);
ModifyStyle(0, WS_NONAVDONEBUTTON, SWP_NOSIZE);
return bHandled = FALSE;
}

 

完成了,效果如下:

wtl_menu6



    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/11/06/Windows_Mobile_WTL_Done_Button.html,如需转载请自行联系原作者


相关文章
|
3月前
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
|
6月前
|
定位技术 Windows
Windows电脑删除文件时确认是否删除文件的提示对话框的取消显示方法
Windows电脑删除文件时确认是否删除文件的提示对话框的取消显示方法
160 1
|
程序员 Windows
【windows编程之对话框】对话框原理,对话框的创建
【windows编程之对话框】对话框原理,对话框的创建
|
C++ Windows
C++ Windows窗口程序:子窗口控件之按钮类button
C++ Windows窗口程序:子窗口控件之按钮类button
844 0
|
数据可视化 编译器 C++
C++ 用DEV-C++建一个Windows窗口程序带文本框和命令按钮
C++ 用DEV-C++建一个Windows窗口程序带文本框和命令按钮
2168 0
|
测试技术 Windows
软件测试面试题:在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?
软件测试面试题:在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?
127 0
|
Windows
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(二)
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(二)
282 0
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(二)
|
Windows
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(一)
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(一)
245 0
【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )(一)
|
Windows 网络协议
Windows Mobile远程控制软件Pocket Controller Pro简介
不仅PPC/WindowsMobile系统可以使用该控制软件,只要是WINCE内核的系统都可以使用,我在WinCE.net 4.2系统测试通过,只不过640*480的分辨率,控制速度不是那么理想。
968 0
|
数据格式 XML Windows
Windows Mobile 5.0编程—奥运场馆速查
我忙里偷闲,用VS2005开发了一个关于奥运场馆的小程序,时值2008北京奥运前夕,也算是为奥运做了“贡献”
693 0