IconWorkShop使用总结
IconWorkShop是一款专业的图标制作软件,转换工具。可以导入现有的图像自动生成图标。支持的图片格式:PSD、PNG、BMP、JPEG、GIF等,是唯一一款可以为工具栏创建和编辑图像条的图标编辑器,可以编辑图像条,在此基础上通过简单的拖放图像创建新的图像条。
在创建项目选项下选择 适用于工具栏的图像带:
填写项目名称,设置图像大小即可,点击确定:
此时,图像带的图标为空的,那么如何添加图像呢,可以在管理器下新建一个文件夹,如 图标库,然后右键 图标库 选择 导入 菜单项, 选择要导入的图像即可:
接下来就可以选择图像带中图像标号,然后把图标库中的图像拖拽到图像编辑区中既可以,然后CRL+S保存起来
Ribbon界面工程
使用VS2010新建一个MFC工程:
应用程序选择单文档,项目类型选择office,一直下一步,直到如下界面:
去掉导航窗口,保留标题栏,基于ribbon的界面工程就建好了。
接下来是Ribbon功能区控件添加,在工具箱里有类别、面板、按钮等控件可以使用
问题1:如何屏蔽ribbon功能区的右键弹出菜单功能?
在CMainFrame类添加重写函数OnShowPopupMenu:
BOOLCMainFrame::OnShowPopupMenu(CMFCPopupMenu* pMenuPopup)
{
// TODO: 在¨²此ä?添¬¨ª加¨®专Á¡§用®?代䨲码?和¨ª/或¨°调Ì¡Â用®?基¨´类¤¨¤
return 0;
//returnCFrameWndEx::OnShowPopupMenu(pMenuPopup);
}
注释掉 //return CFrameWndEx::OnShowPopupMenu(pMenuPopup);即可
问题2:如何去掉CDockablePane停靠窗口的关闭按钮?
在CDockablePane变量的Create函数参数中添加第7、8参数:AFX_CBRS_REGULAR_TABS,AFX_CBRS_RESIZE
if(!m_dockablePane.Create(_T("面板"), this,CRect(0,0,200, 200), TRUE, 1001, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN
|CBRS_LEFT|CBRS_FLOAT_MULTI,AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
{
TRACE0("Failedto create LeftPane\n");
}
问题3:如何设置CDockablePane窗口左边停靠?
EnableDocking(CBRS_ALIGN_ANY);
EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
if(!m_dockablePane.Create(_T("面?板ã?"), this,CRect(0,0,200, 200), TRUE, 1001,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN
|CBRS_LEFT|CBRS_FLOAT_MULTI))
{
TRACE0("Failedto create LeftPane\n");
}
m_dockablePane.EnableDocking(CBRS_ALIGN_LEFT);
DockPane(&m_dockablePane);
问题4:如何使用复选框控制停靠窗口的显示与隐藏?
新建一个checkbox按钮,为该按钮添加事件处理程序,消息类型:COMMAND、UPDATE_COMMAND_UI
COMMAND消息响应菜单命令,UPDATE_COMMAND_UI更新界面元素,用以启用或禁用菜单项或命令按钮。
问题5:如何修改窗口的标题?
方法1,在资源视图Sring Table下的String Table中找到IDR_MAINFRAME,修改第一个\n前的字符串(它显示的是-之后的值),在第一个\n后添加一个字符串(它显示的是-之前的值)。
方法2,在CXXApp类的InitInstance函数中添加如下代码:
m_pMainWnd->SetWindowText("Ribbon界面测试");
EASYSIZE代码使用
EASYSIZE代码主要用于VC中排版控件,下面主要说明EASYSIZE宏:
BEGIN_EASYSIZE_MAP(which_dialog)
EASYSIZE(control_id,left, top, right, bottom, option)
END_EASYSIZE_MAP
各部分参数说明如下:
which_dialog指示使用EASYSIZE的对话框
control_id是控件ID
left、top、right、bottom为左上右下的属性,一般可以设:ES_BORDER、ES_KEEPSIZE、control_id,ES_BORDER指保持距离对话框边框的距离不变,ES_KEEPSIZE指控件的宽度和高度保持不变,left/right只能设置其中一个为ES_KEEPSIZE,top/bottom也只能设置其中一个为ES_KEEPSIZE,control_id表示当前控件距离control_id的距离不变
option属性取值ES_HCENTER、ES_VCENTER、0、ES_HCENTER|ES_VCENTER
ES_HCENTER表示水平居中
ES_VCENTER表示垂直居中
0表示默认,不作居中操作
EASYSIZE如何添加在代码里?
第1步:在对话框的头文件里包含EASYSIZE的头文件#include "easysize.h"
第2步:在对话框类的声明中添加 DECLARE_EASYSIZE
第3步: 在对话框源文件中的OnInitDialog()中添加 INIT_EASYSIZE;
第4步: 添加对话框的WM_SIZE消息响应函数OnSize(),并在OnSize函数中添加:
UPDATE_EASYSIZE;
第5步: 在对话框源文件中添加映射宏:
BEGIN_EASYSIZE_MAP(CDlgThree)
EASYSIZE(IDC_EDIT1, ES_BORDER, ES_BORDER,ES_BORDER, ES_BORDER, 0)
EASYSIZE(IDOK, ES_BORDER,IDC_EDIT1,ES_KEEPSIZE, ES_BORDER, 0)
EASYSIZE(IDCANCEL, ES_KEEPSIZE,IDC_EDIT1,ES_BORDER, ES_BORDER, 0)
END_EASYSIZE_MAP
对话框如何更改背景颜色?
方法1:对话框添加WM_PANIT消息,在OnPaint函数中添加如下代码:
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(rect.left,rect.top,rect.Width(),rect.Height(), RGB(200,180,144));
方法2:对话框添加WM_CTLCOLOR消息,在OnCtlColor函数中添加如下代码:
staticCBrush gBr;
static bool isInited = false;
if(!isInited)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP3);
gBr.CreatePatternBrush(&bitmap);
COLORREF clearColor = -1;
bitmap.DeleteObject();
isInited = true;
}
if(pWnd == this)
{
pDC->SetBkMode(TRANSPARENT);
returngBr;
}
方法2有缺陷,即窗口大小比图片大时,窗口背景出现了图片拼接现象,这时可以使用方法3的做法。
方法3:在OnPaint函数中添加如下代码:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP4);
BITMAP bmpTemp;
bitmap.GetBitmap(&bmpTemp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(&dcCompatible);
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
dc.FillRect(&rect, &CBrush(RGB(255,255,255)));
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0, 0, bmpTemp.bmWidth, bmpTemp.bmHeight, SRCCOPY);
如何设置单文档窗体的最小界面大小?
当我们缩放窗口时,我们希望窗口有一个最小界面,界面小于这个值时,窗口不再变小,我们可以在CMainFrame类添加WM_GETMINMAXINFO消息,并在OnGetMinMaxInfo消息响应函数中添加如下代码:
voidCMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
if(lpMMI->ptMinTrackSize.x<= 1024)
{
lpMMI->ptMinTrackSize.x = 1024;
}
if(lpMMI->ptMinTrackSize.y<= 768)
{
lpMMI->ptMinTrackSize.y = 768;
}
CFrameWndEx::OnGetMinMaxInfo(lpMMI);
}
如何使用ShadeButtonST ?
-
在对话框头文件中添加包含文件
#include "BtnST.h"
#include "ShadeButtonST.h"
-
把如下文件拷贝到工程目录下,并在解决方案资源管理器中添加这些头文件与源文件。
-
为对话框类添加CShadeButtonST的变量
//添加3个变量
CShadeButtonST m_btnButtons[3];
-
在DoDataExchange函数中添加关联变量
void CDlgMain::DoDataExchange(CDataExchange*pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST1, m_listCtrl);
DDX_Control(pDX,IDOK, m_btnButtons[0]);
DDX_Control(pDX,IDC_BTN_TEST, m_btnButtons[1]);
DDX_Control(pDX,IDCANCEL, m_btnButtons[2]);
}
5、在OnInitDialog函数中添加代码:
m_btnButtons[0].SetShade(CShadeButtonST::SHS_SOFTBUMP,8,20,5,RGB(200,0,0));
m_btnButtons[0].SetIcon(IDI_ICON1);
m_btnButtons[1].SetShade(CShadeButtonST::SHS_SOFTBUMP);
m_btnButtons[1].SetIcon(IDI_ICON3, (int)BTNST_AUTO_GRAY);
m_btnButtons[2].SetShade(CShadeButtonST::SHS_SOFTBUMP);
m_btnButtons[2].SetIcon(IDI_ICON2, (int)BTNST_AUTO_GRAY);
6、注意导入ICO资源,编译运行就可以实现ShadeButton