BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
   ...
   char title[3];    //必须这样做
   title[0]='a';
   title[1]='a';
   title[2]='a';   cs.lpszName=title;  
   ...
}
在运行时,窗口的标题栏为乱码,
怎样才能使标题栏显示正确的内容,

解决方案 »

  1.   

    char title[4];    //必须这样做
       title[0]='a';
       title[1]='a';
       title[2]='a';
       title[3]='\0';
      

  2.   

    我原来语句是这样的:
    char titlechar[100];
    LoadString(hResource, APP_TITLE1, titlechar, 100);
    cs.lpszName=titlechar;  但是在执行时标题栏总是乱码
    我用AfxMessageBox();现实正常,
      

  3.   

    在后面加终止符不得行,
    ////
    我是想从一个DLL中传入字符串资源,
      

  4.   

    我原来语句是这样的:
    ///想从一个资源DLL中传入字符串资源hResource=::LoadLibrary(...);
    //#define APP_TITLE1     111
    char titlechar[100];
    LoadString(hResource, APP_TITLE1, titlechar, 100);
    cs.lpszName=titlechar;  但是在执行时标题栏总是乱码
    我用AfxMessageBox();现实正常,
      

  5.   

    调试跟踪一下,看看是不是unicode与ansi的问题
      

  6.   

    wltg2001(红猪) ( ) 信誉:100    Blog   加为好友  2007-5-8 17:30:45  得分: 0  总之一句话,字符数组最后没有加\0,所以它不知道什么时候结束,所以就越界了。
    //////////////////////
    估计不是越界的问题,
    因为我手动设置也不得行,
    char titlechar[100];
    LoadString(hResource, APP_TITLE1, titlechar, 100);
    int len=strlen(titlechar);
    titlechar[len]='\0';
    cs.lpszName=titlechar; ////////
    结果还是一样的,
    标题栏只有一个汉字和一个上下箭头
      

  7.   

    yoyo_alex_lw() ( ) 信誉:100    Blog   加为好友  2007-05-08 17:35:57  得分: 0  
    调试跟踪一下,看看是不是unicode与ansi的问题
    ///
    我也估计是,所以我将char titlechar[100]
    改为: TCHAR  titlechar[100]
    结果还是一样的,,
    改为:wchar_t titlechar[100]
    编译:出错:
    正在编译...
    MainFrm.cpp
    e:\project\zhanghua1\zhanghua1\NEW\EMMG08\EMMG\MainFrm.cpp(70) : error C2664: “LoadStringA” : 不能将参数 3 从“wchar_t [100]”转换为“LPSTR”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
    e:\project\zhanghua1\zhanghua1\NEW\EMMG08\EMMG\MainFrm.cpp(71) : error C2664: “strlen” : 不能将参数 1 从“wchar_t [100]”转换为“const char *”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
    e:\project\zhanghua1\zhanghua1\NEW\EMMG08\EMMG\MainFrm.cpp(75) : error C2440: “=” : 无法从“wchar_t [100]”转换为“LPCSTR”
            与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
      

  8.   

    哎,问题已经找到,
    犯了一个常识性的错误.
    应该将那个所使用的数组声明成成员变量.
    ///////////////
    cs.lpszName=titlechar;//
    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
       ...
       char titlechar[100]; //申明成局部变量,
       LoadString(hResource, APP_TITLE1, titlechar, 100);
       cs.lpszName=titlechar;  //这个时候lpszname得到的是titlechar的地址
       ...
       return TRUE;    //在这里,titlechar变量将被销毁.所以程序在编译的时候不会 出问题,而在运行的时候,标题栏显示的是乱码.
    }
    解决办法.将titlechar声明成类的成员变量.就OK了.    
    class CMainFrame : public CFrameWnd
    {
        ...
    private:
            char titlechar[100];  //for title from dll;
        ...
    }