作者:Hi.Baidu.Com/Console_App(文章有改动)
测试环境:VC++ 6.0
打开控制台窗口,唉,左上角的图标还是一个黑黑的框,不免让人感到乏味。万千世界,每个程序运行时的窗体图标都是一个标志,好的标志能让人耳目一新(虽然小了一点)。而命令行程序中,偏偏没有相应的函数能够更改窗体的图标,让人遗憾。经过一段时间的学习,已经掌握了改变命令行窗体图标的方法。本文将教会你如何在命令行程序中更改窗体图标,让命令行更美观。
首先需要知道SendMessage这个API函数。它的功能很强大,能给窗体发送消息,实现想要的效果。
SendMessage(
HWND hWnd,
UNIT msg,
WPARAM wParam,
LPARAM lParam
)
在本篇教程中,我们要发送的消息,即msg参数,是WM_SETICON消息。字面上理解,就是设置窗体图标。当然,命令行的图标都是小一号的16×16图标,图标的大小只需要在wParam中给上ICON_SMALL参数,就会自动转换。而图标需要用HICON类型作为lParam参数。
获取命令行的hWnd,已经在多篇文章中提到过了,具体请参考:
VC获取控制台窗口的句柄(hWnd)
那么,现在我们需要从文件中读取出图标,然后放置入HICON类型中,以便SendMessage调用。读取出图标可以用LoadImage这个API函数。
LoadImage(
HINSTANCE,
LPCTSTR,
UNIT,
int,
int,
UNIT
)
第一个参数为程序的实例句柄,我们需要读的是图标文件,因此可以置空。第二个则是图标文件的路径,注意转义符号\,路径中的所有\都得用\\或者/代替。第三个参数指图像类型,IMAGE_ICON常数。第四和第五个参数为图标的大小,全部填0即可。第六个参数为读取方式,LR_LOADFROMFILE常数。当然,这个API函数返回的是HANDLE,我们需要的是HICON,所以还要做强制转换。
示例代码:
从C:\a.ico中读取图标并设置为窗体图标(命令行句柄保存在变量hwnd中)
HICON hIcon;
hIcon=(HICON)LoadImage(NULL,"C:/a.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
当然,系统中自带了上千个图标,但是这些图标都不是保存在.ico等文件中的,而更多的是保存在.dll或者.exe的资源中。如果能够读取这些资源,就能够使用这些精美的图标了。
读取.dll或者.exe中的资源需要用到ExtractIcon这个API函数。
ExtractIcon(
HINSTANCE hInst,
LPCTSTR lpszExeFileName,
UNIT nIconIndex
)
第一个参数为程序的实例句柄,同样置空即可。第二个参数为文件名,同样需要注意转义符\。第三个参数为资源图标的索引号。
示例代码:
从C:\Windows\System32\NotePad.exe中读取记事本的图标(命令行句柄保存在变量hwnd中)
HICON hIcon;
hIcon=(HICON)ExtractIcon(NULL,"C:/Windows/System32/NotePad.exe",0);
SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
现在,命令行窗体是否更美观了呢?
范例下载地址:
趣盘(作者原地址) /*已失效*/
360云盘下载地址:
http://yunpan.cn/QeZQ3DSeaeNIm(非作者原地址)