mfc显示进程名和进程图标

mfc显示进程名和进程图标,第1张

在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 = 0; i < cProcesses; i++)
{
// 打开进程句柄
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_listProcessInsertItem(0, szProcessName);
m_listProcessSetItemText(nIndex, 1, _T("描述信息"));
m_listProcessSetItemImage(nIndex, (LPARAM)hNewIcon);
}
DestroyIcon(hIcon);
DestroyIcon(hNewIcon);
}
}
CloseHandle(hProcess);
}
}
这段代码会遍历系统中所有进程,获取进程名和图标信息,并将它们添加到对话框的列表框中。注意需要在对话框的OnInitDialog函数中调用此函数,以便在对话框初始化时显示进程信息。

背景图像加载很简单,你只需要做以下几步即可(假设你的登陆界面对话框类名叫“CLoginDlg”):
(1)菜单“Insert”->"Resource",选择Bitmap,然后点“Import”,选择你的背景图像,然后假设该资源ID为“IDB_BITMAP1”;
(2)在LoginDlgh下声明一个CBitmap m_BKbitmap;
(3)在LoginDlgcpp的构造函数中:m_BKbitmapLoadBitmap(IDB_BITMAP1);
(4)在LoginDlgcpp的OnPaint()函数中写上:
void CLoginDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dcGetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rectWidth() - cxIcon + 1) / 2;
int y = (rectHeight() - cyIcon + 1) / 2;
// Draw the icon
dcDrawIcon(x, y, m_hIcon);
}
else
{
BITMAP bm;
CRect rect;
CDC dcMem;
m_BKbitmapGetBitmap (&bm);
GetClientRect(&rect);
dcMemCreateCompatibleDC (&dc);
CBitmap oldbitmap=dcMemSelectObject (&m_BKbitmap);
dcBitBlt (0,0,bmbmWidth ,bmbmHeight ,&dcMem,0,0,SRCCOPY);
dcMemSelectObject(oldbitmap);
CDialog::OnPaint();
}
}
你的问题就OK了。
关于按钮控件显示,建议你可以下载一个CButton的继承类,什么“CButtonST”啊、“CBtnST”啊、“CDlgShadeButtonST”啊,自己手写的话不划算,有很多现成的控件类,都写的非常好,完全可以拿来为我们所用。


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

原文地址: https://outofmemory.cn/yw/13342376.html

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

发表评论

登录后才能评论

评论列表(0条)

保存