创建了CMyFileDialog(继承自CFileDialog),CMyComboBox(继承自CComboBox),用SubClassDlgItem子类化了文件对话框上cmb1控件(即那个选择文件类型的ComboBox),重写了CMyComboBox的OnSetFocus和OnCbnSelchange函数,问题是OnSetFocus能响应进去,但却无法响应OnCbnSelChange,这是怎么回事?

解决方案 »

  1.   

    解决了,感谢google,呵呵,散分因为CBN_SELCHANGE是一个反射消息,子控件发给父窗口,父窗口不处理,再反射回子控件处理
    cmb1的父窗口实际上是标准文件对话框窗口,而CMyfileDialog的对象的父窗口实际上也是标准文件对话框窗口,所以CBN_SELCHANGE消息只会由cmb1发给文件对话框窗口,而不会发给CMyFileDialog的对象
    解决办法是hook,截获发给标准文件对话框的消息,如果属于CBN_SELCHANGE且控件ID=cmb1,则发给CMyFileDialog的对象处理。