.rc中的String Table,表中id的Caption能否用程序来动态修改? .rc中的String Table,表中id的Caption能否用程序来动态修改?比如:ID为ID_FILE_NEW,默认的Caption是Create a new document\nNew,将默认的值用程序改为‘创建新文档\n新建’。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是动态更改菜单的显示,可以通过ModifyMenu来修改。 ModifyMenu更改菜单,但我想更改工具栏按钮的文字显示。 去查一下下面这个函数是怎么用的。然后看里面我注释的地方就给改了工具栏显示的提示了。BOOL CUSDLG::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult){ ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); if (GetRoutingFrame() != NULL) return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; TCHAR szFullText[512]; CString strTipText; UINT nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { nID = ::GetDlgCtrlID((HWND)nID); } if (nID != 0) { //AfxLoadString(nID, szFullText); //这个函数就是根据ID得到ID在StringTable里面的注释了 //在这里判断 if( ID == ID_FILE_NEW ) strTipText="创建新文档\n新建"; if( ID == ID_FILE_OPEN ) strTipText="打开文档\n打开"; #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); }#else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); }#endif *pResult = 0; ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE; } return FALSE;}这个是我在DLG里面用的一个函数,具体用法网上一查就知道了。 动态修改的貌似没有,有也没啥实际用途。但是 ID为ID_FILE_NEW,默认的Caption是Create a new document\nNew,可用程序改为‘创建新文档\n新建’是可以通过多个语言资源来实现的。在 string table 上右键点击,选择复制,然后选择合适的语言(如中文),就可以实现一个ID, 多个不同语言的描述了。不过这种多语言资源的方式,其语言的选择时自动处理的,即中文的系统会显示中文文字,英文的系统会显示英文的问题。 要让用户能选择的话,还需要提前(在载入任何资源前)设定进程所使用的本地化环境。 网络监测端口接受到数据包解包问题(window下) 关于控件的颜色问题 函数标准注释 怎样使Combo只能在下拉框中选而不能直接改编辑框部分? dbgrid(多sheet) 中的内容如何输出到 excel中 为什么代码不往下走了? 找不到ActiveX控件句柄? winpcap中,为什么我的PacketGetAdapterNames()函数得到的Adapter名称总为空? 急救啊,我的程序出现内存泄露 讨论一下dll中如何使用动态连接输出一个类 谷歌金山词霸的界面是怎么实现的? 怎么发送16进制的数据包
BOOL CUSDLG::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
if (GetRoutingFrame() != NULL) return FALSE;
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
TCHAR szFullText[512];
CString strTipText;
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0)
{
//AfxLoadString(nID, szFullText); //这个函数就是根据ID得到ID在StringTable里面的注释了 //在这里判断
if( ID == ID_FILE_NEW )
strTipText="创建新文档\n新建";
if( ID == ID_FILE_OPEN )
strTipText="打开文档\n打开";
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return FALSE;
}这个是我在DLG里面用的一个函数,具体用法网上一查就知道了。
但是
ID为ID_FILE_NEW,默认的Caption是Create a new document\nNew,可用程序改为‘创建新文档\n新建’
是可以通过多个语言资源来实现的。在 string table 上右键点击,选择复制,然后选择合适的语言(如中文),就可以实现一个ID, 多个不同语言的描述了。不过这种多语言资源的方式,其语言的选择时自动处理的,即中文的系统会显示中文文字,英文的系统会显示英文的问题。 要让用户能选择的话,还需要提前(在载入任何资源前)设定进程所使用的本地化环境。