使用ID_FILE_OPEN产生的调试问题,请高手救命啊!
在写程序的时候用到了ID_FILE_OPEN这个id,也指定了消息响应函数的对应规则:
BEGIN_MESSAGE_MAP(MyApp,CWinApp)
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)//打开新文件
ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)//打开旧文件
END_MESSAGE_MAP()
之前在新建一项(open)中也出现过问题,报的是assert之类的问题,我已经解决,是因为我在资源中没有对主程序进行命名的指定,也就是没有在string tale中指定新建文件时打开的新程序的名字,造成赋了空值。
现在对ID_FILE_OPEN,执行时也产生了类似的问题。调试时发现,问题出在docmgr.cpp文件的602行和629行。都是因为赋值为空.但是这个文件是mfc自己的。p.s.在弹出的警告对话框中多按两次忽略,仍然可以正常运行。只有安终止才推出
以下是具体的代码:
BOOL CDocManager::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
CFileDialog dlgFile(bOpenFileDialog, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL, 0);
CString title;
VERIFY(title.LoadString(nIDSTitle));
.........
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
其实,这里面的后一个AFX_IDS_ALLFILTER,我还可以通过指定string table的值来给,但是前面的nIDSTitle我就不懂什么意思了。
我现在最大的问题是怎么给nIDSTitle赋值?另外,如果有高手知道String table的赋值的格式也请不吝赐教!
[解决办法]
检查你的字符串表中是否包含AFX_IDS_SAVEFILE和AFX_IDS_SAVEFILECOPY