楼主redareca(小乐)
用Appwizard生成一个简单的Dialog based Application,在上面放
一个Rich Edit标准控件,编译执行,没有出现主对话框窗口。调试发现,当
执行m_pMainWnd.DoModal()函数时,创建窗口失败返回了-1,直接推出程序。
我能确信是由Rich Edit标准控件引起的,因为将Rich Edit控件换成Edit控件,
程序运行正常。
怀疑是哪一个连接库坏了,于是卸除Visual Studio,重装,问题依旧。
前几天编译一个有List contrl的Dialog based Application,发现
在编译的机器上能执行,在另外一台机器上却不能执行。但是通过在另外那台
机器上装了个Visual Studio,也不用再该机器上重编译程序就解决问题了。
不知道这两个问题时有什么引起的,有没有关系。
1 楼adrianx(蓝色心情)
请在CXXXApp::InitInstance()中m_pMainWnd->DoModal()前调用
AfxInitRichEdit();
你的DoModal就可以用了
另外一台机上是否没有RICHED32.DLL和OLE32.dll
和MFC的一些DLLTop
2 楼coolskeeter(文子)
对于这位兄台所说的关于Rich Edit 控件的问题,小弟碰巧也碰到过。情形是这样的,我在一个document_view 结构的程序中,要从菜单click事件中 使一个dialog .DoModal().但是该对话框并不能出现,调试时发现对话框的m_hWnd NULL。将对话框中的Rich Edit控件删除后,一切完好。最后我的解决办法是,在该dialog 的OnInitDialog() 中用程序去生成一个RichEdit, 那样可以用了,并能正确显示。
class CMyDialog
{
//.....
protected:
CRichEditCtrl m_myRichEdit;//添加一个成员变量到对话框类。
//.............
}
CMyDialog::OnInitDialog()
{
//...................
if(!m_myRichEdit.Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ))
MessageBox("Create RichEdit fail");
//...................
}
其中,nID 我是在.h 文件中自己去
#defined IDC_RICHEDIT 128 写的。
希望能对老兄有点帮助。不过如果有简单点的办法像其他控件一样的做法的话,还望能告知小弟一声。
你说得第二个问题我想是由于动态库的问题。安装了visual Studio后自动安装了一些 DLLs 吧。
3 楼happylaodu(青菜豆腐)
同意adrianx的意见:当在你的程序中要使用CRichEditCtrl时,就必须调用AfxInitRichEdit();函数。
但coolskeeter所说的方法也可行,只不过,对于rect参数,事先得要花点脑筋算一算,最后显示出来的效果如果不满意,还得重设,有点繁。
没有评论:
发表评论