我知道一种方法可以防止在按下Enter或Esc键时关闭MFC对话框,但我想了解更多有关该过程的详细信息以及执行此操作的所有常用替代方法.
在此先感谢您的帮助.
我必须创建一个基于对话框的应用程序,而不是旧的CFormView类型的设计.但是CDialog会生成固定大小的对话框.如何使用可调整大小的对话框创建基于对话框的应用程序?
我已经通过函数获得了控件的指针
CWnd* CWnd::GetDlgItem(int ITEM_ID)
Run Code Online (Sandbox Code Playgroud)
所以我有CWnd*指向控件的指针,但是在CWnd类中找不到任何能够检索给定控件的大小和位置的方法.有帮助吗?
如何CString在vc ++中通过分隔符拆分对象?
例如,我有一个string值
"一+二+三+四"
变成一个CString可变的.
我希望有一个基于对话框的小应用程序,它传递了命令行参数,因此,使用VC++ 6我运行了应用程序向导并选择了MFC对话框应用程序.
这不会自动配备命令行参数.所以我去MSDN刷新了我的记忆.MSDN声明所有C++程序都有main()或wmain()函数,而argc等参数都在这里.我刚创建的应用程序没有这些.
由于显然有一个函数是应用程序的入口点,我可以在这里坚持参数吗?我确实试过这个,但我不相信我实际上正在编辑正确的功能.(我可以从项目设置或类似设备中找到充当main()函数的函数吗?)
基本上,我如何让我的程序读取命令行参数.
也作为副业.对于一个简单的程序,这是,我真的不想使它成为一个MFC应用程序,从而超过MB的大小.是否有应用程序向导模板库允许我创建非MFC对话框应用程序?
将C++与MFC一起使用.来自C#背景我通常只使用字符串表示所有字符串.我将它们用于类成员,方法参数和方法返回值.
现在在C++中我有std :: string,CString,char*,LPCTSTR等等.当我设计我的数据成员,方法参数和方法返回值时,我应该使用哪种类型?易用性很重要,CString似乎提供了这一点,但我的直觉是针对便携式标准,尽管我的优先级列表(现在)的可移植性相当低.另外,我不喜欢创建字符串缓冲区并将它们传递给方法和函数的c语义.
我认为从编码的角度来看,CStrings可能具有优势.但是,总体而言,"高代码质量"的方式是什么?
编辑:
我特别关注代码中的接口点(即方法参数和返回值).例如:
Shape::SetCaption(const char *caption) {...}
Shape::SetCaption(CString caption) {...}
Shape::SetCaption(std::string caption) {...}
Shape::SetCaption(std::wstring caption) {...}
Run Code Online (Sandbox Code Playgroud) 但这是谎言!
大家好!我有以下问题:当我尝试打开资源文件时,PriceCalculationUI.rcVisual Studio 2008告诉我该文件是在另一个编辑器中打开的(在vs2008中,我只有一个打开的选项卡,带有.cpp文件).我检查了这个信息:运行Process Explorer并搜索PriceCalculationUI句柄.在结果中,我发现只有使用PriceCalculationUI目录的devenv.exe.
我接下来该怎么办?
谢谢你的帮助!
附加信息:当我重建(而不是构建)项目时,我看到对话框窗口,其中包含该文件PriceCalculationUI.rc由另一个程序编辑的信息.
回到90年代,当我第一次开始使用MFC时,我曾经动态链接我的应用程序并发送了相关的MFC DLL.这引起了我一些问题(DLL地狱!)而我改为静态链接 - 不仅仅是为了MFC,而是为了CRT和ATL.除了更大的EXE文件之外,静态链接从来没有给我带来任何问题 - 那么其他人是否有任何缺点?有没有充分的理由重新访问动态链接?我的应用程序现在主要是STL/Boost FWIW.
这是我第一次远离VC6的MFC应用程序,我觉得有点愚蠢:
如何添加OnInitDialog处理程序?(我知道如何手动添加它,但从长远来看这是一个痛苦).
双击对话框 - 没有.右键单击对话框 - 禁用"添加事件处理程序".属性 - 消息具有"正常"消息,但不具有WM_INITDIALOG属性 - 事件仅保存来自包含控件的通知在类视图中右键单击 - "添加..."仅具有函数和变量
划痕头
[编辑] d'oh - 它是MFC中的虚拟功能,但仍然......
当消息泵中抛出异常时,我们遇到的问题是Windows静默地吃异常并允许应用程序继续运行.例如,我们创建了一个测试MFC MDI应用程序,并覆盖了OnDraw:
void CTestView::OnDraw(CDC* /*pDC*/)
{
*(int*)0 = 0; // Crash
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Run Code Online (Sandbox Code Playgroud)
在运行应用程序时,您会发现一个令人讨厌的错误消息,但实际上您什么也得不到.该程序似乎运行得很好,但是如果你检查输出窗口,你会看到:
Test.exe中0x13929384处的第一次机会异常:0xC0000005:访问冲突写入位置0x00000000.
Test.exe中0x77c6ee42的第一次机会异常:0xC0150010:当前执行的线程未激活的激活上下文无效.
我知道为什么我收到应用程序上下文异常,但为什么要静默处理?这意味着我们的应用程序在使用时可能会遇到严重问题,但我们永远不会知道它,因为我们的用户永远不会报告任何问题.