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