前几天写了一个mfc的小程序,用来管理学生数据;
一直都是正常的,今天边学边写了一个弹出窗口;
首先,主对话框下面有一个按钮,
我想通过单击它产生一个弹出窗口;
然后弹出窗口中有一个文本框,会有一个默认值,比如姓名;
为了实现这个功能;
我画了一个弹出窗口;
创建了类;
并且也在按钮的函数中使用了DoModal();
我在弹出窗口类的构造函数中写了一句:
text_mo_name.SetWindowText("123");
结果报错
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
Program: d:\文档\visual studio 2010\Projects\ee\Debug\ee.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp
Line: 246
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------
经过在检查,在构造函数中放置了一个this指针,设置了一个断点,发现this指针的hwnd是NULL导致错误;
后来,在弹出窗口中添加了一个按钮,通过点击按钮来给文本框设置显示的字符;
然后就可以正常显示了;
但是,这样不符合我的初衷;
要怎样解决这个问题??
简单来说,就是想在弹出文本框的时候,让文本框显示一个东西;
还有一点,为什么我在窗口预览的时候,所有按钮都是win7的圆角按钮,但是程序实际运行时却是像win95那样的直角按钮;
相当郁闷啊;
10 个解决方案
#1
好像,额,第一个问题解决了..........
我再初始化函数OnInitDialog()中添加了一句
CDialog::OnInitDialog();
好像就可以了
没加这句之前;
在这个函数中写text_mo_name.SetWindowText("123");也会有相同的错误,只不过这次换成文本框的句柄是NULL了;
不过第二个问题还是没有解决
我再初始化函数OnInitDialog()中添加了一句
CDialog::OnInitDialog();
好像就可以了
没加这句之前;
在这个函数中写text_mo_name.SetWindowText("123");也会有相同的错误,只不过这次换成文本框的句柄是NULL了;
不过第二个问题还是没有解决
#2
窗口类的构造函数在执行的时候,窗口还没有绘制好,还不能SetWindowText
#3
text_mo_name.SetWindowText("123");
这句应该放到OnInitDialog函数中,你的text_mo_name关联CEdit控件窗口要正确。
这句应该放到OnInitDialog函数中,你的text_mo_name关联CEdit控件窗口要正确。
#4
还有一点,为什么我在窗口预览的时候,所有按钮都是win7的圆角按钮,但是程序实际运行时却是像win95那样的直角按钮;
#5
加一个manifest资源,指明使用第6版控件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
#6
我的编译器是vs2010,怎么添加mainfest文件呢
#7
资源编辑器里面
#8
资源编辑器里面没有啊
#9
stdafx.h中添加
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
#10
非常感谢;
只不过我没有用unicode
我把第一个ifdef改成了ifndef
#1
好像,额,第一个问题解决了..........
我再初始化函数OnInitDialog()中添加了一句
CDialog::OnInitDialog();
好像就可以了
没加这句之前;
在这个函数中写text_mo_name.SetWindowText("123");也会有相同的错误,只不过这次换成文本框的句柄是NULL了;
不过第二个问题还是没有解决
我再初始化函数OnInitDialog()中添加了一句
CDialog::OnInitDialog();
好像就可以了
没加这句之前;
在这个函数中写text_mo_name.SetWindowText("123");也会有相同的错误,只不过这次换成文本框的句柄是NULL了;
不过第二个问题还是没有解决
#2
窗口类的构造函数在执行的时候,窗口还没有绘制好,还不能SetWindowText
#3
text_mo_name.SetWindowText("123");
这句应该放到OnInitDialog函数中,你的text_mo_name关联CEdit控件窗口要正确。
这句应该放到OnInitDialog函数中,你的text_mo_name关联CEdit控件窗口要正确。
#4
还有一点,为什么我在窗口预览的时候,所有按钮都是win7的圆角按钮,但是程序实际运行时却是像win95那样的直角按钮;
#5
加一个manifest资源,指明使用第6版控件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
#6
我的编译器是vs2010,怎么添加mainfest文件呢
#7
资源编辑器里面
#8
资源编辑器里面没有啊
#9
stdafx.h中添加
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
#10
非常感谢;
只不过我没有用unicode
我把第一个ifdef改成了ifndef