遇到一个很郁闷的问题,想请专家解答,
我创建了一个CMybutton的类,然后设置应用程序挂钩,在挂钩中钩住了对话框的窗口过程,在wm_initdialog消息中,使用CMybutton去子类化对话框中的所有按钮,后来发现,如果对话框资源是我应用程序中的,那么按钮就能正常显示出来,如果是AfxMessageBox弹出的对话框,那么按钮就没有正常显示,上面的字都看不见。
  该如何解决呢?

解决方案 »

  1.   

    #defie CButton CMybutton

    CMybutton m_btn;
    m_btn.SubDlgItemClass(IDC_BUTTON1, this);
      

  2.   

    MessageBox使用的不是标准的对话框机制,是为了尽量少地占用系统资源,达到在最恶劣的系统资源情况下也能显示的目的。
      

  3.   

    coolstar14(寒星溪月)所说的,我正是这么做的,结果就是所描述的,其它的对话框中,按钮都能显示,但是MessageBox中的按钮显示不出来,Mackz所说的,我相信messagebox中的按钮也可以子类化,因为,我曾经想过所有的窗口过程自己来写,并且也能显示出来,但是这种方法太麻烦了,有出现太多的东西,如果直接使用SetWindowsLong,自己写窗口过程是能显示按钮的,但是我现在有了一个继承类,想要去利用这个类去子类化,却失败了,不知道问题的症结在哪里?
      

  4.   

    AfxMessageBox在内部调用::MessageBox.象 Mackz(在相互) 所说的,他用的不是标准的对话框机制。
      

  5.   

    你说按钮文字看不见,从这样看来你应该已经把按钮hook了,是不是因为没有刷新?
    建议你发一个强制刷新的命令。其实hook wm_create不更好?发现是button类型的就subclass
      

  6.   

    我也觉得是已经subclass掉了,但是就是显示不出来,
    由于这个按钮是系统自带的对话框dll中的,其它的按钮都能够正常的hook掉,并显示正常,
    怎么去刷新呢?应该已经刷新过了,
    hook wm_create的消息能够用我自己的CMybutton类去创建吗?具体怎么做?