首页
社区
课程
招聘
[旧帖] VS中Win32编程,如何让窗口标题栏的左上角显示自己导入的图片 0.00雪花
发表于: 2011-7-12 15:58 12295

[旧帖] VS中Win32编程,如何让窗口标题栏的左上角显示自己导入的图片 0.00雪花

2011-7-12 15:58
12295
大家好,我正开始自学mfc。今天想自己导入个图片试试,导入倒是成功了。但是引用失败,我是这样用的,jpg的ID是ID_TYPER,代码是 wcex.hIcon = ::LoadIcon(hInstance,(LPCWSTR)(IDI_TYPER)); 。但是失败,运行时还是显示系统的图标~~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 237
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
我的是这样的:
wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(100));
2011-7-12 16:06
0
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你说的是窗口左上角的图标吧,那个应该用图标加载函数才能加载上去!函数是那个我忘了。。你查下MSDN
2011-7-12 16:16
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我的是vs2010,我上面那句和你说的这个功能是一样的,但是,不知为啥就不成功
2011-7-12 16:21
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是啊,先导入图片嘛,再用图标加载函数,我是这样做的,纠结中啊
2011-7-12 16:23
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
把图片先转换成ico图标格式吧。然后再用LoadIcon载入。。。。
2011-7-12 16:27
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
格式怎么转换呢??求方法
2011-7-12 16:38
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我格式都转成了ico,但是我明明是在ico文件夹下导入的图标,可是结果会自动生成个文件夹Bitmap。添加的资源ID默认为IDB_BITMAP1,就这个id,还是修改之后的我都试过了,还是失败。谁能告诉我为什么以及我要怎么做???
2011-7-12 17:28
0
雪    币: 237
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
rc资源文件中有没添加类似的:
100 ICON  "MAINICON.ico"
2011-7-12 17:37
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
没用,我快投降了
2011-7-12 18:44
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
2011-7-12 19:40
0
雪    币: 1121
活跃值: (707)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
12
在Dlg初始化的时候,仅仅load图标的话,是不够的,需要发送消息。手头只有汇编代码:
invoke LoadIcon,hInstance,ICON_MAIN
invoke SendMessage, hWin, WM_SETICON, ICON_SMALL, eax
其他也一样吧,其实就差个消息,发送过去就行了。
2011-7-12 23:03
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
其实只要注册窗口类的时候指定图标就可以了,
我特地写了个程序测试,使用VS的向导生成一个最普通的win32程序SampleWin32,在资源里添加了2个图标,IDI_ICON1, IDI_ICON2,

特别提点,有2个地方需要图标,一个图标是任务栏和Alt+Tab时出现的,另外一个是左上角的图标是小图标。不知道楼主是不是这里出了问题。

那个WM_SETICON消息,一般如果程序需要动态切换图标的时候可以用。这里其实没有必要的。

代码如下:

ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
[B][COLOR="Red"]	// 任务栏和Alt+Tab时出现的图标,
	//wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SAMPLEWIN32));
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));[/COLOR][/B]
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_SAMPLEWIN32);
	wcex.lpszClassName	= szWindowClass;
[COLOR="red"][B]	// 左上角的图标
	//wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ICON2));[/B][/COLOR]

	return RegisterClassEx(&wcex);
}
2011-7-13 10:57
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
procedure TFrmSort.BtnModifyClick(Sender: TObject);
var
   hd:thandle;
   myico:ticon;
   strfile:string;
begin
   strfile:=EditPath.Text ;
   if fileexists(strfile) then
   begin

   end else begin
      strfile:=ExtractFilePath(paramstr(0))+'1.ico';
   end;
   myico:=tIcon.Create  ;
   //myico.Modified :=true;
   myico.LoadFromFile(strfile);
   hd:=findwindow(nil,pchar(EditWindow.Text));
   if hd<>0 then
   begin
      setwindowtext(hd,pchar(EditText.Text));
      SendMessage(hd,WM_SETICON,ICON_SMALL,myico.Handle );//ICON_BIG
      SendMessage(hd,WM_SETICON,ICON_BIG,myico.Handle );
   end;
end;
2011-7-14 16:18
0
雪    币: 355
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
用LOADICON调用图片格式应该是用ICO图片吧~窗体类直接加载图标应该没有问题,还是说你函数的参数有问题,还是有本MSDN帮助看看比较好
2011-7-14 20:21
0
雪    币: 1121
活跃值: (707)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
16
我之前的程序,仅仅load是不行的,不知道为什么
2011-7-14 22:10
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
话说我都是按你说的这样做的,但是不想要的那种方法还是不行。不过用替换的方法能达到我要的效果,还在努力中啊
2011-7-18 19:44
0
雪    币: 1121
活跃值: (707)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
18
我的也不可以,只有如我回复的发送个消息才行。猜测可能是他们用的CreateWindow,我们用的Dlg资源创建的吧。
2011-7-18 23:44
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
你可以所有的代码贴出来嘛?
2011-7-19 09:59
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
CreateWindow时需要窗口类的名称,我的测试程序是这样写的。
至于Dialog,需要使用WM_SETICON.
2011-7-19 10:04
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
首先你得把你的图片格式转换成.ICO的。在资源视图里,插入资源,资源类型选择ICO的。自动生成的ID一般都叫IDI_ICON1.你可以改个名(便于管理和识别),也可以不改。这时候你在这改动ID:
WNDCLASSEX wcex;
中间其它设置省略...
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST));
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
IDS_TEST是窗口图标和IDI_SMALL是应用程序图标。
2011-7-21 13:42
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
如果是vs2010的话,
你会发现在窗口的构造函数里有个调用:
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
那么直接定位IDR_MAINFRAME
打开资源窗口,在IDR_MAINFRAME右面的属性里可以直接修改filename的内容,指定另外的一个ico文件,然后重新生成解决方案,搞定,本人亲测。
2011-7-21 14:24
0
游客
登录 | 注册 方可回帖
返回
//