问3问题
在附件MapEdit 工程里的问题一:
在 void CBoxManMapEditerWnd::OnMenuAbout()ShellAbout(this->m_hWnd,TEXT("推箱子—编辑器"),TEXT("Version : WengTN"),NULL/*::LoadIcon(NULL,MAKEINTRESOURCE(IDR_MAINFRAME))*/);为什么这个函数最后一参数我设置了图标但不显示?问题二:
在 void CBoxManMapEditerWnd::OnMenuToolbar()我想改变菜单栏的 caption ,在帮助菜单里有“隐藏工具栏”,我希望点击后工具栏隐藏,并且菜单项的Caption 变成“显示工具栏”,要如何实现?还有点就是点工具栏上的“X”关闭我也希望菜单项相应变成“显示工具栏”,要如何实现?
问题三:
在 void CBoxMan_Edit::SaveMap(void)执行到下面两句会异常,为什么?
_fputts(strBuf, pFile);
_fputts(TEXT("\n"),pFile);bug 重现方法:随便画个地图,然后点“文件”--“保存”
在附件MapEdit 工程里的问题一:
在 void CBoxManMapEditerWnd::OnMenuAbout()ShellAbout(this->m_hWnd,TEXT("推箱子—编辑器"),TEXT("Version : WengTN"),NULL/*::LoadIcon(NULL,MAKEINTRESOURCE(IDR_MAINFRAME))*/);为什么这个函数最后一参数我设置了图标但不显示?问题二:
在 void CBoxManMapEditerWnd::OnMenuToolbar()我想改变菜单栏的 caption ,在帮助菜单里有“隐藏工具栏”,我希望点击后工具栏隐藏,并且菜单项的Caption 变成“显示工具栏”,要如何实现?还有点就是点工具栏上的“X”关闭我也希望菜单项相应变成“显示工具栏”,要如何实现?
问题三:
在 void CBoxMan_Edit::SaveMap(void)执行到下面两句会异常,为什么?
_fputts(strBuf, pFile);
_fputts(TEXT("\n"),pFile);bug 重现方法:随便画个地图,然后点“文件”--“保存”
ShellAboutW(this->m_hWnd,TEXT("推箱子—编辑器"),TEXT("Version : WengTN"),::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)));
ShellAbout(this->m_hWnd,TEXT("推箱子—编辑器"),TEXT("Version : WengTN"),::LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)));
this->SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), false);最好定义一个HICON成员变量,Load一次,多次使用。
这个图标在资源文件Icon文件夹下都没看到这图标
void CBoxManMapEditerWnd::OnMenuToolbar()
{
MENUITEMINFO mii; mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING;
if(m_bToolBarShow)
{
m_bToolBarShow = false;
mii.dwTypeData = L"显示工具栏";
}
else
{
m_bToolBarShow =true;
mii.dwTypeData = L"隐藏工具栏";
}
CMenu *mainMenu = this->GetMenu();
CMenu *subMenu = mainMenu->GetSubMenu(2);
subMenu->SetMenuItemInfo(0, &mii, true);
this->DrawMenuBar();
this->ShowControlBar(&this->m_wndToolBar, m_bToolBarShow, false);
}
wmemset(strBuf,TEXT('0'),sizeof(strBuf));
此行代码是宽字符操作,最后参数不能给sizeof,越界了,导致pFile被修改。
但我在资源视图里看到的 ID 为 IDR_MAINFRAME 的图标是(MFC 字样的),但实际显示在标题栏的却是(蓝色背景白线的)res\\BoxMan_Editer.ico 文件的图标而在 ShellAbout(this->m_hWnd,TEXT("推箱子—编辑器"),TEXT("Version : WengTN"),::LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME))); 这句语句作用下显示的又是(MFC 字样的)的图标这是为什么?还有问题二的,若工具栏是点“X”关闭的,要如何实现?问题三:
我这么改为什么还不行?
wmemset(strBuf,TEXT('0'),wcslen(strBuf));
还有异常。
谢谢!
2、这个似乎不太好处理,我想到的办法是自己派生一个类,替换调现在使用的CToolBar类,然后处理WM_WINDOWPOSCHANGED消息。记得把CBoxManMapEditerWnd::OnMenuToolbar中的menu部分代码都去掉,只保留ShowCtrlBar,以免重复。也许有其它更好的办法,不过我不清楚。
3、strBuf未初始化,所以wcslen无法得到合理的值,wcslen是在字符串中查找'\0'的。你的这部分代码比较乱,wmemset是多余的,但后面的代码还有错。注意两点,一是字符串需要以'\0'结尾,二是字符串操作的长度单位需要是字符个数。你的m_tcMap中也都没有以'\0'结尾。另外提一下,这类情况的文件通常都用二进制格式保存。
你重新添加一个ICON的资源,把res\BoxMan_Editer.ico放进去就可以了
然后在LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));改成你相应的图标ID
你重新添加一个ICON的资源,把res\BoxMan_Editer.ico放进去就可以了
然后在LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));改成你相应的图标ID
你的BoxMan_Editer.ico文件中带有两个图标,一个是16*16的,就是蓝色背景白线的那个;另一个是32*32的,MFC那个。你在文件夹中切换查看方式(图标/列表)就可以看到这两个。
你可以重新做一个ico文件,只要一个32*32的图标就可以。