您的位置:首页 > 其它

修改基于对话框的MFC程序的主窗口类名

2011-09-22 17:56 330 查看
在单文档对象模型中修改主窗口的类名只需 重载 PreCreateWindow 函数,并在其中填写如下代码即可

//BOOL CReporterDlg::PreCreateWindow(CREATESTRUCT& cs)
//{
//	// TODO: 在此添加专用代码和/或调用基类
//	cs.lpszClass = "MyClassName";
//	return CDialog::PreCreateWindow(cs);
//}

但对于基于对话框模式的MFC程序而言,打断点调试查看,重载的这个函数根本不被调用,所以如此修改就没有任何作用了

可以这样修改基于对话框的MFC的程序的类名

1、取消 Enable MFC Features

vc6.0 如下修改



VS2005 修改如下图


2、填写新的类名

vc++6.0



VS2005



3、注册MyClass窗口

BOOL CReporterApp::InitInstance()
{
if ( CheckAppIsOpen() )
{
return FALSE;
}
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

AfxEnableControlContainer();

// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
//SetRegistryKey(_T("Tescomm Reporter"));

WNDCLASS wndMyClass;
::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wndMyClass);
//这是为了获取模板中的设定好的窗口的大小,风格信息
wndMyClass.lpszClassName = "MyClass";
//填写一个我们自己的类名,和上面资源中填写的名字要一致
AfxRegisterClass(&wndMyClass);
//注册新的类名,这些要在新的对话框使用前实现

CReporterDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此处放置处理何时用“确定”来关闭
//  对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用“取消”来关闭
//  对话框的代码
}

// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
//  而不是启动应用程序的消息泵。
return FALSE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: