winAPI中用dialogbox产生的对话框任何添加图标,在左上角显示的那个,是用loadicon和sendmessage MB_USERICON吗?

解决方案 »

  1.   

    没成功,程序只有一个dialog。
    能把你的代码给出来吗
      

  2.   

    在对话框的OnInitDialog消息响应函数中加入: // Set the icon for this dialog. 
             // Set big icon
    SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_TP), TRUE);
             // Set small icon
    SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_TP), FALSE);然后再OnQueryDragIcon函数中加入
    return (HCURSOR) AfxGetApp()->LoadIcon(IDI_ICON_TP);其中IDI_ICON_TP为图标的ID
      

  3.   

    全是MFC的函数
    先谢过这位大哥可是我不会MFC,正在努力学win32编程
    case WM_INITDIALOG:
         //这里应该怎么加代码???
      

  4.   

    下面的代码将惊叹号图标加入到对话框,hDlg为对话框句柄。case WM_INITDIALOG:
        if(!SendMessage(hDlg,WM_SETICON,ICON_BIG ,
                        (LPARAM)LoadIcon(NULL,IDI_ASTERISK)))
            MessageBox(hDlg,"Failure","",MB_OK);
        else
            MessageBox(hDlg,"OK","",MB_OK);
        return TRUE;
      

  5.   

    加入惊叹号可以,但是加入我自己定义的图标就不行了
    而且用惊叹号是也显示failure,但是图标有,自定义图标显示failure,无图标出现.我现在已经成功了,但还有一个问题:
    我是在winmain函数中调用hicon=LoadIcon(hinst,(LPCTSTR)IDI_MYICON);就行.如果将hicon=LoadIcon(NULL /*hinst*/,(LPCTSTR)IDI_MYICON);函数放在case WM_INITDIALOG:后面LoadIcon函数调用失败,为什么???ps: tpProgramer(tp编程者)能加我qq 8144250吗?
      

  6.   

    我反汇编了一个程序,它是在WM_initdialog消息中LoadIcon的:
    :00401017 FF3564314000            push dword ptr [00403164]* Reference To: USER32.DialogBoxParamA, Ord:0092h
                                      |
    :0040101D E892040000              Call 004014B4
    :00401022 50                      push eax* Reference To: KERNEL32.ExitProcess, Ord:0075h
                                      |
    :00401023 E8B6040000              Call 004014DE
    :00401028 55                      push ebp
    :00401029 8BEC                    mov ebp, esp
    :0040102B 817D0C10010000          cmp dword ptr [ebp+0C], 00000110 ;WM_initdialog消息
    :00401032 752C                    jne 00401060
    :00401034 68C8000000              push 000000C8
    :00401039 FF3564314000            push dword ptr [00403164]* Reference To: USER32.LoadIconA, Ord:019Bh  ;调用LoadIcon函数
                                      |
    :0040103F E87C040000              Call 004014C0
    :00401044 A368314000              mov dword ptr [00403168], eax
    :00401049 FF3568314000            push dword ptr [00403168]* Possible Reference to Dialog: DialogID_0001 
                                      |
    :0040104F 6A01                    push 00000001
    :00401051 6880000000              push 00000080
    :00401056 FF7508                  push [ebp+08]* Reference To: USER32.SendMessageA, Ord:0210h  ;调用成功就SendMessage
                                      |
    :00401059 E86E040000              Call 004014CC
    :0040105E EB7A                    jmp 004010DA为什么我的程序调用LoadIcon就不成功
      

  7.   

    up
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  8.   

    case WM_INITDIALOG:
        HICON   hIcon;
        hIcon = LoadIcon(hInst,(LPCTSTR)IDI_MYICON);
        SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
        SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
        break;好了,一切搞定:)
      

  9.   

    补充:在 WM_INITDIALOG 后用 LoadIcon(NULL,(LPCTSTR)IDI_MYICON);
    肯定会失败!因为,LoadIcon(...)函数会到第一个参数指定的模块中去加载图标资源,
    如果是 NULL 则从系统资源中加载,谁知道系统中有没有一个 IDI_MYICON
    的图标资源呢:)所以第一个参数当然要是程序本身的模块句柄:)
      

  10.   

    还是不行hIcon = LoadIcon(hInst,(LPCTSTR)IDI_MYICON);
    我不知道你的hInst参数是从那里来的,我的hInst(文件开始静态定义的)到处理消息时已经是NULL了
      

  11.   

    把 hInst 定义成全局变量,
    或者做成私有变量再做个HINSTANCE GetSafeInstance(...);函数得到啊:)下面示范://Test.h
    HINSTANCE   hInst = NULL;
     .
     .
     
    //Test.cpp
    #include "Test.h"
     .
     .
    hInst = hInstance;
     .
     .
    //TestDialog.h
    class TestDialog : public CDialog
     .
     .//TestDialog.cpp
    #include "TestDialog.h"
    #include "Test.h"
     .
     .
    hIcon = LoadIcon(hInst,(LPCTSTR)IDI_MYICON);
     .
     .给出你的部分代码吧,否则,很难检查的:)
      

  12.   

    补充:
       上面是 MFC 代码。
       下面我用 SDK 示范://Common.h
    extern HINSTANCE   hInst;
     .
     .//Test.cpp
    #include "Common.h"HINSTANCE   hInst = NULL;WinMain(...)
    {
       hInst = hInstance;
        .
        .
    }
     .
     .这样,不管你的 LoadIcon(...)函数在哪个文件里,只要你 
    #include "Common.h"
    都可以访问 hInst 变量:)