各位大侠,我想在MFC的工具栏上添加自己的图标(在网上下载的图片),具体应该怎样 *** 作呢谢谢!~

各位大侠,我想在MFC的工具栏上添加自己的图标(在网上下载的图片),具体应该怎样 *** 作呢谢谢!~,第1张

下列的这段代码是我从网上找的,希望对你有帮助!

先找到自己想要的Ico图标,并将这些图标依次加到程序资源中,声明一个CToolBar m_wndToolBar工具栏变量和

CImageList img变量;

在程序中创建工具栏如下,其中各项参数可以参考MSDN:

if(m_wndToolBarCreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC )

||m_wndToolBarLoadToolBar(IDR_TOOLBAR1))

{

TRACE0(_T("创建工具条失败\n"));

}

m_wndToolBarGetToolBarCtrl()SetButtonWidth(43, 70);

在ImageList中加上自己想要的图标

ImgCreate(22, 22, ILC_COLOR8|ILC_MASK,2,2);

ImgSetBkColor(::GetSysColor(COLOR_BTNFACE));

imgAdd(AfxGetApp()->LoadIcon(IDI_ICON1));

imgAdd(AfxGetApp()->LoadIcon(IDI_ICON2));

imgAdd(AfxGetApp()->LoadIcon(IDI_ICON3));

imgAdd(AfxGetApp()->LoadIcon(IDI_ICON4));

m_wndToolBarGetToolBarCtrl()SetHotImageList(&img);

imgDetach();

得到按钮的大小,设置按钮的大小

CRect rectToolBar;

m_wndToolBarGetItemRect(0, &rectToolBar);

m_wndToolBarSetSizes(rectToolBarSize(), CSize(20,20));

一个可能是你的bitmap没有设置成成员变量

二个 是你的bitmap 太大了,只显示了左上角一部分,刚好你的位图不在那里(一般是1313)

在这里面 *** 作

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

获取位图大小,用完可以注释掉

CString str;

strFormat("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),

GetSystemMetrics(SM_CYMENUCHECK));

MessageBox(str);

获得以后,你自己去调整位图大小

后面是

GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

GetSubMenu(0)//0为第一个菜单

SetMenuItemBitmaps 第一个参数为第一个子菜单

///对话框类头文件里

HICON picon1;

HICON picon2;

HICON picon3;

int c;

CStatic m_image;///图像控件的。控制变量

//对话框初始化里。IDI_ICON1等是插入的三个小图标。

c=0;

m_imageSetIcon(m_hIcon);

c++;

picon1=AfxGetApp()->LoadIcon(IDI_ICON1);

picon2=AfxGetApp()->LoadIcon(IDI_ICON2);

picon3=AfxGetApp()->LoadIcon(IDI_ICON3);

///按扭响应函数

void CMyDlg::OnButton1()

{

// TODO: Add your control notification handler code here

switch(c)

{

case 0:

m_imageSetIcon(m_hIcon);

c++;

break;

case 1:

m_imageSetIcon(picon1);

c++;

break;

case 2:

m_imageSetIcon(picon2);

c++;

break;

case 3:

m_imageSetIcon(picon3);

c=0;

break;

default:

c=0;

break;

}

}

GetIconWndClass就是框架窗口创建之前的资源准备,这个函数并不仅仅是准备了icon,而是包括了框架和资源整合的大部分工作。这个函数只能被LoadFrame调用,不可以自己来调用。

如果是系统运行出现这个LoadIcon的问题,一般是资源被锁定或占用,具体原因没调试不好说。

如果是你自己要使用LoadIcon,在MFC下不需要这么用,app类有LoadIcon成员函数处理这些事物,或者用LoadImage加载图标,可以获得更灵活的形式。

m_TreeCtrl Control CTreeCtrl

同时利用“MESSAGES MAP”为各命令按钮增加控制功能函数。

然后在代码文件VCTREEDlgCPP中分别加入如下控制代码:

(1)在文件开始处增加图像列表定义

CImageList Cil1,Cil2;//大小图标像列表

(2)在初始化文件开始处增加代码

BOOL CVCTREEDlg::OnInitDialog()

{ CDialog::OnInitDialog();

//原来其它代码

// TODO: Add extra initialization here

// 此处开始增加代码

CVCTREEApp pApp=(CVCTREEApp )AfxGetApp();//创建图象列表

Cil1Create(16,16,ILC_COLOR,2,2);

Cil1Add(pApp->LoadIcon(IDI_PM));

Cil1Add(pApp->LoadIcon(IDI_CJ));

m_TreeCtrlSetImageList(&Cil1,TVSIL_NORMAL); //设置图象列表

DWORD dwStyles=GetWindowLong(m_TreeCtrlm_hWnd,GWL_STYLE);//获取树控制原风格

dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;

SetWindowLong(m_TreeCtrlm_hWnd,GWL_STYLE,dwStyles);//设置风格

char  CJ[4]={"玉溪卷烟厂","云南卷烟厂","沈阳卷烟厂","成都卷烟厂"};//根数据名称

char  PM[4][5]={

{"红梅一","红梅二","红梅三","红梅四","红梅五"},//产品数据项

{"白梅一","白梅二","白梅三","白梅四","白梅五"},

{"绿梅一","绿梅二","绿梅三","绿梅四","绿梅五"},

{"青梅一","青梅二","青梅三","青梅四","青梅五"}};

int i,j;

HTREEITEM hRoot,hCur;//树控制项目句柄

TV_INSERTSTRUCT TCItem;//插入数据项数据结构

TCItemhParent=TVI_ROOT;//增加根项

TCItemhInsertAfter=TVI_LAST;//在最后项之后

TCItemitemmask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽

TCItemitempszText="数据选择";

TCItemitemlParam=0;//序号

TCItemitemiImage=0;//正常图标

TCItemitemiSelectedImage=1;//选中时图标

hRoot=m_TreeCtrlInsertItem(&TCItem);//返回根项句柄

for(i=0;i<4;i++){//增加各厂家

TCItemhParent=hRoot;

TCItemitempszText=CJ[i];

TCItemitemlParam=(i+1)10;//子项序号

hCur=m_TreeCtrlInsertItem(&TCItem);

for(j=0;j<5;j++){//增加各产品

TCItemhParent=hCur;

TCItemitempszText=PM[i][j];

TCItemitemlParam=(i+1)10+(j+1);//子项序号

m_TreeCtrlInsertItem(&TCItem);

}

m_TreeCtrlExpand(hCur,TVE_EXPAND);//展开树

}

m_TreeCtrlExpand(hRoot,TVE_EXPAND);//展开上一级树

return TRUE; // return TRUE unless you set the focus to a control

}

需要注意,在MFC向导自动生成的对话框类的源代码中,如果没有OnInitDialog()函数,需要手动向其中添加,具体方法如下:

1在ClassView向导中右键单击d出的对话框类名,选择Add

Virtual

Function;

2在d出的对话框左边列表中选择OnInitDialog函数,并单击Add

and

Edit按钮;

以上就是关于各位大侠,我想在MFC的工具栏上添加自己的图标(在网上下载的图片),具体应该怎样 *** 作呢谢谢!~全部的内容,包括:各位大侠,我想在MFC的工具栏上添加自己的图标(在网上下载的图片),具体应该怎样 *** 作呢谢谢!~、关于mfc菜单项图标问题的,大侠帮帮忙啊、mfc加载图标资源的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9313463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存