首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

:为什么小弟我按照书上抄的代码不能正常显示?(关于toolbar)

2012-02-17 
请教高手:为什么我按照书上抄的代码不能正常显示?(关于toolbar)我按照书上抄下来的建立toolbar工具条的代

请教高手:为什么我按照书上抄的代码不能正常显示?(关于toolbar)
我按照书上抄下来的建立toolbar工具条的代码,不能正常显示:资源文件中的IDR_TOOLBAR是toolbar的id,其中,我已经把这里面的位图文件改为多种颜色(每个按钮一个颜色),但是在编译后产生的对话框中,显示出来的还是灰色的。也就是没有做任何修改的那种,只是按钮的个数是对的。这是为什么?

以下是我的代码:
#include <afxwin.h>
#include <afxext.h>
#include "resource.h "

class   MyFrame   :   public   CFrameWnd
{
private:
COLORREF   color;
CToolBar   toolbar;//声明一个工具栏对象
CStatusBar   statusbar;//声明一个状态栏对象
UINT   ID_Color;//此处不是源码中的,是源码无法通过时我加的
public:
MyFrame()
{
Create(NULL,
"controlBar ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
rectDefault,
NULL,
MAKEINTRESOURCE(IDR_MENU));
color   =   RGB(255,0,0);
}

afx_msg   int   OnCreate(LPCREATESTRUCT   lpCreateStruct)
{
//调用父类的OnCreate函数,若失败则终止函数执行
if(CFrameWnd::OnCreate(lpCreateStruct))
return   -1;//返回-1将撤销正在建立的窗口框架对象
//建立工具栏
//toolbar.Create(this);
//toolbar.LoadToolBar(IDR_TOOLBAR);//将工具栏与工具栏资源连接
if   (!toolbar.Create(this)   ||!toolbar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0( "未能创建工具栏\n ");
return   -1;             //   未能创建
}
toolbar.EnableDocking(CBRS_ALIGN_TOP);//设置工具栏在窗口框架可停留的位置
toolbar.SetBarStyle(toolbar.GetBarStyle()|CBRS_TOOLTIPS
|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);//设置工具栏的形式


EnableDocking(CBRS_ALIGN_ANY);//设置窗口框架可放置工具栏的位置

DockControlBar(&toolbar);//将工具栏加入窗口框架

//建立与状态栏对应的字符串标志符
static   UINT   indicators[]=
{
ID_SEPARATOR,
ID_Color,//我不明白这个东西的作用
};

//建立状态栏
statusbar.Create(this);//当前窗口框架中建立一个状态栏
statusbar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
return   0;
}

afx_msg   void   OnRed()
{
color   =   RGB(255,0,0);
statusbar.SetPaneStyle(1,SBPS_STRETCH);
statusbar.SetPaneText(1, "red ");//设置状态栏地址段的显示文字

}

afx_msg   void   OnGreen()
{
color   =   RGB(0,255,0);
statusbar.SetPaneStyle(1,SBPS_STRETCH);
statusbar.SetPaneText(1, "green ");

}

afx_msg   void   OnBlue()
{
color   =   RGB(0,0,255);
statusbar.SetPaneStyle(1,SBPS_STRETCH);
statusbar.SetPaneText(1, "blue ");

}

afx_msg   void   OnUpdateRed(CCmdUI   *   aCmdUI)
{
aCmdUI-> SetCheck(color   ==   RGB(255,0,0));//将对象打勾
}

afx_msg   void   OnUpdateGreen(CCmdUI   *   aCmdUI)
{
aCmdUI-> SetCheck(color   ==   RGB(0,255,0));//将对象打勾
}

afx_msg   void   OnUpdateBlue(CCmdUI   *   aCmdUI)
{
aCmdUI-> SetCheck(color   ==   RGB(0,0,255));//将对象打勾
}

afx_msg   void   OnLButtonUp(UINT   nFlags,   CPoint   point)
{
SetCapture();
}

afx_msg   void   OnLButtonDown(UINT   nFlags,   CPoint   point)
{
if(this   ==   GetCapture())
{
CClientDC   aDC(this);
aDC.SetPixel(point,color);
}
}

DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
//响应窗口建立消息
ON_WM_CREATE()
//响应color   menu建立消息
ON_UPDATE_COMMAND_UI(IDM_RED,OnUpdateRed)
ON_UPDATE_COMMAND_UI(IDM_GREEN,OnUpdateGreen)
ON_UPDATE_COMMAND_UI(IDM_BLUE,OnUpdateBlue)


//响应command_ui建立消息
ON_COMMAND(IDM_RED,OnRed)
ON_COMMAND(IDM_GREEN,OnGreen)
ON_COMMAND(IDM_BLUE,OnBlue)
//响应鼠标消息
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

class   MyApp:   public   CWinApp
{
public:
BOOL   InitInstance()
{
CFrameWnd   *Frame=new   MyFrame;
m_pMainWnd   =   Frame;
Frame-> ShowWindow(SW_SHOW);
return   true;
}
}a_app;

[解决办法]
检查一下工具栏各按钮ID是否与IDM_RED等一一对应.

热点排行