为什么编译出来的没有图标?

MasterLuo 2011-08-28 07:58:34
我用GCC编译了一WIN32GUI的程序,那个程序图标是我的图片,但是从系统里看那个图片不能显示,就是应用程序没有图标,但是运行程序后左上角那个图标确实是我的图片,请问是怎么回事?怎么样能使系统的exe图标就是我这个ico呢?
代码如下:

#include <windows.h>

LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
WNDCLASS wc;
HWND hwnd;
MSG msg;

wc.style = 0;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;

   //这个地方加载了phone.ico
HICON hIcon = (HICON)LoadImage(NULL, "phone.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
wc.hIcon = hIcon;


wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = "program";
wc.lpszMenuName = NULL;

RegisterClass(&wc);
hwnd = CreateWindow(
"program",
"program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
HWND_DESKTOP,
NULL,
hInstance,
NULL
);


ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc;

switch(message) {
case WM_PAINT:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;

}
return DefWindowProc(hwnd, message, wParam, lParam);
}

怎么样能使系统的exe图标就是我这个ico呢?
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxun 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 masterluo 的回复:]

引用 2 楼 xunxun1982 的回复:

什么意思,是说程序图标么?

程序图标要使用windres把rc编译成res
然后res和其他.o一起链接成程序

这样就有图标了

我也听说过,但我不知道怎么写rc文件,你能给一个具体的例子吗?
[/Quote]
rc很简单啊,如果光包含图标

aaaa ICON "my.ico"

然后使用windres编译即可

怕麻烦的可以用codeblocks
把rc文件加入工程
他会自动编译链接的
MasterLuo 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xunxun1982 的回复:]

什么意思,是说程序图标么?

程序图标要使用windres把rc编译成res
然后res和其他.o一起链接成程序

这样就有图标了
[/Quote]
我也听说过,但我不知道怎么写rc文件,你能给一个具体的例子吗?
hongwenjun 2011-08-28
  • 打赏
  • 举报
回复
resource.rc 文件
------------------
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDI_ICON ICON ".\\phone.ico"
还有其他内容
-----------------


resource.h" 内容
--------------

#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif

#define IDI_ICON 105

// cpp文件
  //这个地方加载了phone.ico
HICON hIcon = HLoadIcon(hInst, (LPCTSTR)IDI_ICON);

maoxing63570 2011-08-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20030425/07/1705345.html
看下这个,你要改变的是可执行文件的图标
xunxun 2011-08-28
  • 打赏
  • 举报
回复
什么意思,是说程序图标么?

程序图标要使用windres把rc编译成res
然后res和其他.o一起链接成程序

这样就有图标了
hongwenjun 2011-08-28
  • 打赏
  • 举报
回复
你这个图片是外部加载的,没有编译到资源里

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧