WIN32桌面程序修改图标

程序左上角的图标和 桌面工具栏上的图标,都是通过注册窗口的那个函数里面修改 窗口类对象的成员来修改:


//
//  函数: MyRegisterClass()
//
//  目标: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
  //  wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));//加载系统图标,第一个参数要为null
	//wcex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(32512));
	//桌面工具栏上的图标
	wcex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_INFORMATION));
	
	wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName = NULL;// MAKEINTRESOURCEW(IDC_WINDOWSPROJECT1);
    wcex.lpszClassName  = szWindowClass;
	//wcex.hIconSm = NULL;// LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
	//程序左上角图标
	wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_CYCLE));
    return RegisterClassExW(&wcex);
}

 

2. exe程序的桌面图标的修改:

看到一个方式,是用Icon下几个图标中value值最小的,比IDR_MAINFRAME的ID数值小,所以想更改生成的exe文件图标,要保证图标的value值是Icon下几个图标中最小的了;

修改这个ID值,主要在Resource.h中,将自己加的icon资源Value改为最小,并且定义的位置顺序也要放在前面,因此不一定要删除IDR_MAINFRAME.

然后编译运行,找到你的debug目录,一般将看到图标已经更改的.exe执行文件。

问题:

   经常会编译运行后,发下debug目录下的exe文件图标没有改,但将exe文件拷贝出debug目录,放到其他地方,图标就会改变了,而一放回去,则又变回旧的图标了。。。

 然后,我把这个debug改成debug2, 就是改个名字,图标就变成我想要的了;然后把目录名字又该回去debug,图标有变成旧的了。。。搞不懂。。。

 

后续发现:

  右键exe文件, 查看属性,发下属性窗口上的图标是自己想要的,而exe文件上的依旧是旧的图标:

 

或者: 把debug目录挪到别的路径下,图标就变成想要的了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章