VC SDK下如何设置对话框左上角的图标

本文讲述了在Windows编程中为对话框设置图标的正确方法,并对比了SetClassLong、SendMessage和SendDlgItemMessage三个函数的区别及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

郁闷,今天弄了一下午就为了弄明白一件事,为什么我之前创建的对话框左上角有图标,而今天它死活不肯出来,搞了半天终于知道原来是用错函数了。。。


SetClassLong(hwndDlg,GCL_HICON,(long)hIcon);
SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(long)hIcon);
SendDlgItemMessage(hwndDlg,IDD_DIALOG,WM_SETICON,ICON_BIG,(long)hIcon);

这三个咋一看长得差不多,尤其是最后两个

SendDlgItemMessage是为了方便向对话框中的控件发送消息而设立的,而我却刚好栽在这个函数上

实践证明,要向对话框窗口发送消息,还是SendMessage函数靠谱些,SendDlgItemMessage可能会不起效果

SetClassLong是个非常好的函数,可以用它来设置图标、光标(光标一定要用这个函数,用WM_SETCURSOR没用的)等等,其他的我也没用过就不清楚了

最后附上源码吧,其实现在想起来也感觉当时蛮傻的,居然纠结了一下午,还以为是编译器出问题了,连电脑都重启过。。。

#include "stdafx.h"
#include "resource.h"
HICON hIcon;
int CALLBACK DialogProc(    HWND hwndDlg,  // handle to dialog box
							UINT uMsg,     // message
							WPARAM wParam, // first message parameter
							LPARAM lParam  // second message parameter
						)
{
    switch (uMsg)
    {
	case WM_INITDIALOG:
		//SetClassLong(hwndDlg,GCL_HICON,(long)hIcon);//有效
		SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(long)hIcon);//有效
		//SendDlgItemMessage(hwndDlg,IDD_DIALOG,WM_SETICON,ICON_BIG,(long)hIcon);//无效
		break;
	case WM_CLOSE:
		//DeleteObject(hIcon);
		EndDialog(hwndDlg,NULL);
		break;
	default:
		return FALSE;
	}
	return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	// TODO: Place code here.
	hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));
	DialogBoxParam(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,DialogProc,0);
	return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值