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

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

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

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

CImageList img变量

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

if(m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC )

||m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))

{

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

}

m_wndToolBar.GetToolBarCtrl().SetButtonWidth(43, 70)

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

Img.Create(22, 22, ILC_COLOR8|ILC_MASK,2,2)

Img.SetBkColor(::GetSysColor(COLOR_BTNFACE))

img.Add(AfxGetApp()->LoadIcon(IDI_ICON1))

img.Add(AfxGetApp()->LoadIcon(IDI_ICON2))

img.Add(AfxGetApp()->LoadIcon(IDI_ICON3))

img.Add(AfxGetApp()->LoadIcon(IDI_ICON4))

m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img)

img.Detach()

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

CRect rectToolBar

m_wndToolBar.GetItemRect(0, &rectToolBar)

m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(20,20))

在MFC中显示进程名和进程图标,需要使用Windows API函数来获取进程信息和图标资源,然后将信息和图标显示在MFC界面上。具体步骤如下:

获取进程信息:使用Windows API函数EnumProcesses枚举系统中所有进程的ID,然后使用OpenProcess函数打开进程句柄,调用GetModuleFileNameEx函数获取进程名。

获取进程图标:使用Windows API函数ExtractIconEx获取进程程序文件的图标资源,然后使用GetIconInfo函数获取图标信息,使用CreateIconIndirect函数创建图标。

在MFC界面上显示进程名和图标:在对话框中添加一个列表框控件,使用InsertItem函数向列表框中添加项,然后使用SetItemText函数设置项的文本,使用SetItemImage函数设置项的图标。

示例代码如下:

C++

Copy code

// 遍历进程

void CProcessDlg::EnumerateProcesses()

{

DWORD aProcesses[1024], cbNeeded, cProcesses

if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))

return

cProcesses = cbNeeded / sizeof(DWORD)

for (int i = 0i <cProcessesi++)

{

// 打开进程句柄

HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i])

if (!hProcess) continue

// 获取进程名

TCHAR szProcessName[MAX_PATH] = { 0 }

if (GetModuleFileNameEx(hProcess, NULL, szProcessName, MAX_PATH))

{

// 获取进程图标

HICON hIcon = NULL

int nIcons = ExtractIconEx(szProcessName, -1, NULL, &hIcon, 1)

if (nIcons == 1 &&hIcon)

{

ICONINFO info

GetIconInfo(hIcon, &info)

// 创建图标

HICON hNewIcon = CreateIconIndirect(&info)

if (hNewIcon)

{

// 添加项到列表框

int nIndex = m_listProcess.InsertItem(0, szProcessName)

m_listProcess.SetItemText(nIndex, 1, _T("描述信息"))

m_listProcess.SetItemImage(nIndex, (LPARAM)hNewIcon)

}

DestroyIcon(hIcon)

DestroyIcon(hNewIcon)

}

}

CloseHandle(hProcess)

}

}

这段代码会遍历系统中所有进程,获取进程名和图标信息,并将它们添加到对话框的列表框中。注意需要在对话框的OnInitDialog函数中调用此函数,以便在对话框初始化时显示进程信息。

MFC单文档程序,在资源编辑器中只有一个已有的toolbar资源,你只需要在资源编辑器里面,通过“空位”建立一个按钮图标(通过绘制或者复制)并加工好,然后选中这个工具条按钮,右键属性,给予它一个ID就可以使用了。

ID最好是先建立菜单项的方式给予,这样方便建立提示说明等文字。

工具条按钮,不需要SetButton方法,这个是对话框按钮控件的方式,而不是工具条按钮。


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

原文地址: http://outofmemory.cn/bake/11758215.html

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

发表评论

登录后才能评论

评论列表(0条)

保存