none
CStatusBarCtrl为什么不能设置背景颜色和图标 RRS feed

  • 问题

  • VC2010,系统是win7,建立的MFC程序,单文档,多文档,纯对话框都试验过..代码如下

    m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0); 
                      int strPartDim[3]= {100, 200, -1}; //分割数量
                      m_StatusBar.SetParts(3, strPartDim);
    
                      //设置状态栏文本
                      m_StatusBar.SetText(L"分栏一", 0, 0);
                      m_StatusBar.SetText(L"分栏二", 1, 0);
                      m_StatusBar.SetText(L"分栏三", 2, 0);
    				  m_StatusBar.SetBkColor(RGB(0,0,250));
    				  bool aaa= m_StatusBar.SetIcon(1, 
                                    SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME),
                                    FALSE));//为第二个分栏中加的图标
    成功的添加了一个三等分的状态栏,字也上去了,但是就是更改背景颜色和添加图标统统失灵,但是奇怪的是,设置图标的SetIcon返回的值是True,说明成功了,但就是不显示图标.背景颜色也毫无变化.这是为什么呢,可能的原因在哪里


    2012年12月20日 15:56

答案

  • 我已经找到原因了,只要使用了unicode,vs会默认启用visual style导致这个方法失灵,除非注释掉stdafx.h的最后一段内容来禁用visual style

    #ifdef _UNICODE
    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    #endif


    2012年12月25日 11:18

全部回复

  • 您上面的代码,我用VS2008SP1建的对话框工程中测试没有问题,效果如下图所示:

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年12月21日 2:06
    版主
  • 您上面的代码,我用VS2008SP1建的对话框工程中测试没有问题,效果如下图所示:

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年12月21日 2:06
    版主
  • 您上面的代码,我用VS2008SP1建的对话框工程中测试没有问题,效果如下图所示:

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    请教一个问题,你这段代码放在哪个方法内,我是放在继承自CDialogEx的自定义类...重载方法virtual BOOL OnInitDialog()内部,是不是放错了地方

    2012年12月21日 15:24
  • 是的,将代码放到对话框类的OnInitDialog函数中的最后一个return  TRUE;之前即可。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年12月24日 6:23
    版主
  • 我已经找到原因了,只要使用了unicode,vs会默认启用visual style导致这个方法失灵,除非注释掉stdafx.h的最后一段内容来禁用visual style

    #ifdef _UNICODE
    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    #endif


    2012年12月25日 11:18