为什么加了自定义控件后的对话框运行后无法显示?

laomai 2003-12-30 03:27:46
仿照《VC++技术内幕》第5版的例22d程序,
我做了一个自定义控件,然后写了一个基于对话框的程序,但是运行后却看不见这个对话框了,请问有人遇到过这种现象吗?
我查了一下,发现我的问题和下面这个帖子类似,但是那里也没人能回答出来:-(
http://search.csdn.net/expert/topic/50/5010/2003/6/3/1872579.htm
...全文
609 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jerry_Lee01 2010-05-30
  • 打赏
  • 举报
回复
学习啦!
laomai 2003-12-31
  • 打赏
  • 举报
回复
上午和原来的代码比较了半天,终于找到毛病了。CMyDllApp.h中的代码
class CMyDllApp : public CWinApp
{
public:
CMyDllApp();
virtual BOOL InitInstance(); //就是这一句!我没有写virtual!而书上的例子是写了的
DECLARE_MESSAGE_MAP()
};

谢谢大家的参与。我准备把这个帖子放进FAQ。
laomaicunzhang 2003-12-31
  • 打赏
  • 举报
回复
换了一个马甲,我终于解决了。马上告诉大家原因:-)
laomai 2003-12-31
  • 打赏
  • 举报
回复
又查到了一个新帖子:
http://search.csdn.net/expert/topic/50/5006/2002/9/24/1049372.htm
按它的说法在对话框的构造函数里加上如下语句,还是不行啊:-(

INITCOMMONCONTROLSEX iccex;
iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
iccex.dwICC = ICC_LISTVIEW_CLASSES;
if (!InitCommonControlsEx(&iccex))
{
AfxMessageBox("ERROR!");
return;
}
laomai 2003-12-31
  • 打赏
  • 举报
回复
问题还是没有解决,麻烦朋友们帮着再看一下好吗?
laomai 2003-12-30
  • 打赏
  • 举报
回复
qfly() :
能不能给出完整的代码?
qfly 2003-12-30
  • 打赏
  • 举报
回复
创建对话框之前

BOOL CYourApp::InitInstance()
{
//在这里
}
laomai 2003-12-30
  • 打赏
  • 举报
回复
那位高人能准确的告诉我到底应该怎样修改我的程序啊?谢谢!
laomai 2003-12-30
  • 打赏
  • 举报
回复
InitCommonControlsEx应该写在什么地方?
laomai 2003-12-30
  • 打赏
  • 举报
回复
如果哪位朋友有VC技术内幕第5版,麻烦看一下例22d程序,我基本上就是按他做的啊
qfly 2003-12-30
  • 打赏
  • 举报
回复
Slider Control Tree Control Date Time Picker
Spin Control Tab Control Month Calandar
Progress Control Animation Control IP Address Control
Hot Key Rich Edit Control Extended Combo Box
List Control Rich Edit 2.0 Control Custom Control //你的自定义控件在这里,包含在其中。
laomai 2003-12-30
  • 打赏
  • 举报
回复
可是我这是自定义控件。而且,机器上有一个可以运行的备份啊。
qfly 2003-12-30
  • 打赏
  • 举报
回复
MSDN有详细解释:

将公共控件或 Rich Edit 控件添加到对话框之后,在测试对话框时该控件不出现,或者对话框本身不出现。

问题示例

创建 Win32 项目,修改应用程序设置以创建 Windows 应用程序(不是控制台应用程序)。
在资源视图中,双击 .rc 文件。
在 Dialog 选项下,双击“关于”框。
将一个“IP Address Control”添加到对话框。
保存并“全部重新生成”。
执行程序。
在对话框的“帮助”菜单上,单击“关于”命令;没有显示任何对话框。
原因

目前,将下列公共控件或 Rich Edit 控件拖放到对话框上时,对话框编辑器不自动在项目中添加代码。当此问题发生时,Visual Studio 既不提供错误也不进行警告。必须手动为控件添加代码。

Slider Control Tree Control Date Time Picker
Spin Control Tab Control Month Calandar
Progress Control Animation Control IP Address Control
Hot Key Rich Edit Control Extended Combo Box
List Control Rich Edit 2.0 Control Custom Control

公共控件的修复

为了在对话框上使用公共控件,需要在创建对话框之前调用 InitCommonControlsEx 或 AFXInitCommonControls。

RichEdit 控件的修复

必须为 Rich Edit 控件调用 LoadLibrary。有关更多信息,请参阅 Platform SDK 中的对 RichEdit 1.0 控件使用 MFC、关于 Rich Edit 控件,以及 Rich Edit 控件概述。

NOMADBLUE 2003-12-30
  • 打赏
  • 举报
回复
我试了一下,也是这样!!!
qfly 2003-12-30
  • 打赏
  • 举报
回复
需要在创建对话框之前调用 InitCommonControlsEx 或 AFXInitCommonControls

BOOL CYourApp::InitInstance()
{
InitCommonControls();
......
}
曾经的猎狐 2003-12-30
  • 打赏
  • 举报
回复
呵呵,我也只是猜的,没看出什么毛病来
laomai 2003-12-30
  • 打赏
  • 举报
回复
有没有朋友愿意在自己的机器上试一下我的步骤?看看能不能运行正常?
laomai 2003-12-30
  • 打赏
  • 举报
回复
awnucel(西大耻犹未雪,南京恨何时灭&抵制日货) :
ShowWindow(SW_SHOW)要加的话,应该在哪加啊?
laomai 2003-12-30
  • 打赏
  • 举报
回复
问题是我有一个以前的备份,运行结果就是正常的。
那里基本步骤和我写的差不多,也没写ShowWindow(SW_SHOW)语句啊。
曾经的猎狐 2003-12-30
  • 打赏
  • 举报
回复
注册了窗口类了,加了重绘了
ShowWindow(SW_SHOW) 呢
加载更多回复(7)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧