在对话框中利用CToolBar类添加工具条的方法
UINT BASED_CODE DockTool[]={ID_NEWGAME,ID_SAVE,ID_OPEN,ID_SEPARATOR,ID_COPYFEN,ID_PASTEFEN,ID_SEPARATOR,IDC_ABORT,IDC_ABORT,ID_SEPARATOR,ID_SOUNDEFECT};
// CChnChessDlg 消息处理程序
BOOL CChnChessDlg::DrawToolBar(UINT nResID,CSize size,DWORD dwStyle){
//创建工具栏
BOOL bRt = m_wndToolBar.Create(this,dwStyle);
if(bRt)
{
/* 创建自定义位图的工具栏初始化工作 ***************************************************/
//定义工具栏上的按钮的所对应的标识
//加载工具栏要用的位图
CBitmap bitmap;
bitmap.LoadBitmapW(nResID);
//建立工具栏中的图片列表
static CImageList m_ilToolBar;
m_ilToolBar.Create(size.cx,size.cy,ILC_COLOR32,,);//以多少像素来切割图片
m_ilToolBar.Add(&bitmap,(CBitmap*)NULL);
//设置工具栏按钮图片
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);
//设置工具栏的按钮大小,和按钮中位图大小(注意: 按钮大小必须大于按钮中位图大小)
SIZE sbutton;
sbutton.cx= size.cx + ;
sbutton.cy=size.cy + ;
m_wndToolBar.SetSizes(sbutton,size);
//设置工具栏上按钮的所对应的标识,和按钮个数
UINT nButtonNum = sizeof(DockTool)/sizeof(UINT);
m_wndToolBar.SetButtons(DockTool,nButtonNum);
TRACE(_T("\r\n sizeof(DockTool)/sizeof(UINT) = %d"),sizeof(DockTool)/sizeof(UINT));
/* 前期准备工作 *************************************************************************/
CRect rcClientOld;
CRect rcClientNew;
// 用 rcClientOld 获取客户区间
GetClientRect(rcClientOld);
// 用 rcClientNew 获得除了 ToolBar 区的对话框客户区
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,,reposQuery,rcClientNew);
//获得在加入 ToolBar 后控件应该移动的偏移偏移量
CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);
/* 重新设置对话框的窗体区间 *************************************************************/
//得到对话框窗体区间
CRect rcWindow;
GetWindowRect(rcWindow);
//修改对话框宽度和高度,即让对话框添加上 ToolBar 的高度和适应 ToolBar 的高度
rcWindow.right += rcClientOld.Width() - rcClientNew.Width();
rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();
//移动对话框
MoveWindow(rcWindow,FALSE);
/* 调整控件位置 *************************************************************************/
CRect rcChild;
//获得窗口控件
CWnd* pwndChild = GetWindow(GW_CHILD);
//遍历控件
while(pwndChild)
{
//获得控件区间
pwndChild->GetWindowRect(rcChild);
//将屏幕坐标转换为客户区坐标
ScreenToClient(rcChild);
//将控件移动相对位置
rcChild.OffsetRect(ptOffset);
//移动控件
pwndChild->MoveWindow(rcChild,FALSE);
//获得下个控件句柄
pwndChild = pwndChild->GetNextWindow();
}
//显示 ToolBar
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,);
}
return bRt;
}
在对话框中利用CToolBar类添加工具条的方法的更多相关文章
- Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:
Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法: ------------------------------------------------------------ ...
- SpringBoot中Service实现类添加@Service却任然无法注入的问题
最近一直在研究Spring Boot.从GitHub上下载了一个my-Blog源码,一边看,一边自己尝试去实现,结果掉在坑了,研究了近一周才爬出来,特地来这博客园记录下来,一是避免自己在放这样的错误, ...
- QT中添加工具条QToolBar
项目用的QT5.3,设计师中没有直接拖工具条的控件,那要怎么加工具条呢? 其实.ui文件是xml类型的文本文件,用uedit或记事本打开,找到之前有的工具条段落,复制粘贴一个,保存,再在vs中用设计师 ...
- Entity Framework中的实体类添加复合主键
使用Code First模式实现给实体类添加复合主键,代码如下: using System; using System.Collections.Generic; using System.Compon ...
- javascript中利用柯里化函数实现bind方法
柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预 ...
- Android中的基类—抽取出来公共的方法
在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类 ...
- (转)Android中的基类—抽取出来公共的方法
在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类 ...
- wxWidgets:给窗口添加工具条
请先看上一篇<wxWidgets入门>. 修改MyFrame.h: #ifndef MYFRAME_H #define MYFRAME_H #include <wx/wxprec.h ...
- Android中利用画图类和线程画出闪烁的心形
本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: <ig ...
随机推荐
- swift 获取文件的Md5值
获取文件的Md5值的方法如下 func md5File(url: URL) -> String? { let bufferSize = 1024 * 1024 do { //打开文件 let f ...
- NYOJ--517--最小公倍数(大数打表)
最小公倍数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字 ...
- vue指令v-once示例解析
只渲染元素和组件一次.随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过.这可以用于优化更新性能. <!-- 单个元素 --> <span v-once>This ...
- asp.net 程序,当发生找不到文件的错误时,如何正确定位是哪个文件?
需要在Global.asax.cs中添加Application_Error代码如下,在Log中查看是哪个文件缺失: protected void Application_Error(object se ...
- iOS的阴影绘制及性能优化
今天来讲讲iOS开发过程中的阴影绘制及其潜在的绘图性能问题.虽然在开发过程中,我们使用阴影功能的机会不是很多,但是如果用了,有可能引起如卡顿等性能问题,所以,还是有必要来探究一下阴影的绘制过程,及如何 ...
- JS基础属性跟运算
小编这周学了JS函数基础知识跟运算!!下面就迫不及待跟大家分享一下 [switch case的结构写法] 结构写法:(略) 2注意事项: ①switch结构()中的表达式.可以使用各种js支持的数据类 ...
- android studio多渠道多包名多apk打包
转自 利用 Android Studio 和 Gradle 打包多版本APK 搬砖的道路上,经常会有各种不同的需求,比如今天就碰到过一个打包版本的apk的要求, 比如一个apk给多个客户使用,如张三 ...
- linux下mysql忘记密码的解决方案
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地 ...
- TP-Link路由器的设置
TP-Link路由器的设置.. 路由器中TP-Link是公认比较好用的品牌. 将TP-Link路由器的Lan与电脑连接.拔掉Wan口上的线. 注:tplink的路由器默认IP基本都是192.168.1 ...
- mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作
一.首先说下本篇博客所实现功能的背景和功能是怎样的: 背景:因为公司项目开始迁移新平台项目,所以以前的平台老数据以及订单信息需要拆分表,而且需要业务逻辑来分析以前的订单表,来拆分成另外的几个新表,包括 ...