MFC里一些类似于On*()的函数都是怎么触发的,有否有个例子,可发邮件[email protected]

解决方案 »

  1.   

    一般都是windows消息触发的,详情可见深入浅出MFC
      

  2.   

    On*()的函数都是消息的响应函数。
    比如你定义了一个按钮,使用下面的宏告诉编程框架什么时机调用此函数。BEGIN_MESSAGE_MAP(CtestDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    END_MESSAGE_MAP()ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    这句话的意思就是IDC_BUTTON1按下时调用OnBnClickedButton1函数。
      

  3.   

    消息触发。。
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message) 
    {
    case WM_COMMAND:
    wmId    = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 

    switch (wmId)
    {
    case IDC_OK:
                    OnOK();

    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_CREATE: OnCreate();
    break; case WM_INITDIALOG:
    OnInitDialog();
    break;
      

  4.   

    MFC里的消息映射我知道的,只是我想要的是原始的win32程序,
      

  5.   

    to cxz1985:
         这种用法我知道,但有一个问题:
        就是如果你本身写的类用在了MFC下,而派生于其类的函数又该如何触发呢
        也就是说怎样让你写的这种带有On*()函数的类通用地发生一些触发呢?
      

  6.   

    to id27145:
             关键是基类是一个独立的东西,可以被放在任意工程下,比如:
       它可以被放在MFC工程,也可以放在WIN32工程 
       现在的问题是,被移动后,基类该怎么改写呢,如何使其通用呢
      

  7.   

    原来模拟mfc做过类似的功能
    简单说,mfc创建一个链表,每个消息函数都有一个记录,并且真个表可以贯通父类到子类。
    所以,只要一个for循环,遍历链表,找到对应的,调用函数就行了。楼主可以看看MFC源码,就能发现下面的东西隐藏的真正内容。DECLARE_MESSAGE_MAPBEGIN_MESSAGE_MAP
    END_MESSAGE_MAP
      

  8.   

    你建立一个不带MFC的“Hello,World”就可以看到是消息调度函数触发的,后面的调用Proc如四楼所示
      

  9.   

    那基类里可否有宏用来说明MFC还是WIN32
    WIN32里应该只能写在WndProc里,而MFC里是消息映射
    两个要通用。。 看起来蛮难
    在基类里用像MFC的消息映射数组来定义可能行得通