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

fancy198189 2007-07-23 03:21:50
我按照书上抄下来的建立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;
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancy198189 2007-07-27
  • 打赏
  • 举报
回复
luohongming,不好意思哈!你的解答是正确的!问题已经解决了。
fancy198189 2007-07-26
  • 打赏
  • 举报
回复
不是的啊,没有清楚的吗?
luohongming 2007-07-23
  • 打赏
  • 举报
回复
检查一下工具栏各按钮ID是否与IDM_RED等一一对应.
josling 2007-07-23
  • 打赏
  • 举报
回复
没有update吧

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧