最近在做vs2008下windows mobile的SDI文档的界面开发,左下角的有一个新建的按钮,我想动态改变它的标题,但是我不论在框架类还是在视类下调用SetWindowText,在程序生成的时候就会报错,然后我上网找了一下资料,发现网上有两种解决办法。但是我看不太懂,请大家帮帮忙
TBBUTTONINFO  BtnInfo;   
BtnInfo.cbSize  = sizeof(TBBUTTONINFO);   
BtnInfo.dwMask  = TBIF_TEXT;   
BtnInfo.pszText = szText;//要替换的文本   
SendMessage(g_hWndMenuBar, TB_SETBUTTONINFO, IDM_MAIN_MENU_LEFT,  (LPARAM)(LPTBBUTTONINFO)&BtnInfo);  
我有两个疑问,这几行代码应该放在哪个函数,还有就是怎么获得g_hWndMenuBar

解决方案 »

  1.   

    你说用SetWindowText出错了, 出什么错了 , 贴出来
      

  2.   

    Debug assertion failed
    winocc.cpp
    line 245
      

  3.   

    在callstack里找见自己的函数, 然后贴出错误行代码
      

  4.   

    在callstack里找见自己的函数,,这个看不懂
      

  5.   

    汗, 你在debug的窗口里看callstack, 然后点击自己函数.
      

  6.   

    在SetWindowText函数开始单步调试之后,跳到wincore.cpp,
    遇到下面一段代码 CATCH_ALL(e)
    {
    lResult = AfxProcessWndProcException(e, &pThreadState->m_lastSentMsg);
    TRACE(traceAppMsg, 0, _T("Warning: Uncaught exception in WindowProc (returning %ld).\n"),
    lResult);
    DELETE_EXCEPTION(e);
    }
    END_CATCH_ALL
    然后就弹出一个消息框,说是遇到不适合参数
      

  7.   

    blacklist.exe!CWnd::SetWindowTextW(const wchar_t* lpszString = 0x0011cb08) 行: 245, 字节偏移量: 0x60 C++int CWnd::GetWindowText(LPTSTR lpszString, int nMaxCount) const
    {
    ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlSite == NULL)
    return ::GetWindowText(m_hWnd, lpszString, nMaxCount);
    else
    return m_pCtrlSite->GetWindowText(lpszString, nMaxCount);
    }
    其中else是245行
      

  8.   

    原来左下角的不是一个菜单,是一个按钮,如果想改变其标题的的话可以用
    TBBUTTONINFO  BtnInfo;   
    BtnInfo.cbSize  = sizeof(TBBUTTONINFO);   
    BtnInfo.dwMask  = TBIF_TEXT;   
    BtnInfo.pszText = szText;//要替换的文本   
    SendMessage(g_hWndMenuBar, TB_SETBUTTONINFO, IDM_MAIN_MENU_LEFT,  (LPARAM)(LPTBBUTTONINFO)&BtnInfo);  
    其中g_hWndMenuBar可用函数SHFindMenuBar求得,该函数的参数就是menubar的所属窗口的hwnd
    参考文章http://blog.csdn.net/coderwu/archive/2009/07/15/4350578.aspx