.rc中的String Table,表中id的Caption能否用程序来动态修改?比如:ID为ID_FILE_NEW,默认的Caption是Create a new document\nNew,将默认的值用程序改为‘创建新文档\n新建’。

解决方案 »

  1.   

    就是动态更改菜单的显示,可以通过ModifyMenu来修改。
      

  2.   

    ModifyMenu更改菜单,但我想更改工具栏按钮的文字显示。
      

  3.   

    去查一下下面这个函数是怎么用的。然后看里面我注释的地方就给改了工具栏显示的提示了。
    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里面用的一个函数,具体用法网上一查就知道了。
      

  4.   

    动态修改的貌似没有,有也没啥实际用途。
    但是 
    ID为ID_FILE_NEW,默认的Caption是Create a new document\nNew,可用程序改为‘创建新文档\n新建’
    是可以通过多个语言资源来实现的。在 string table 上右键点击,选择复制,然后选择合适的语言(如中文),就可以实现一个ID, 多个不同语言的描述了。不过这种多语言资源的方式,其语言的选择时自动处理的,即中文的系统会显示中文文字,英文的系统会显示英文的问题。 要让用户能选择的话,还需要提前(在载入任何资源前)设定进程所使用的本地化环境。