post这个消息的wparam和lparam如何构造?
postmessage(TCN_SELCHANGE,?,?)

解决方案 »

  1.   

    NMHDR nmd;
    nmd.hwndFrom = ...;
    nmd.idFrom = ...; 
    nmd.code = TCN_SELCHANGE; 
    postmessage(WM_NOTIFY ,idCtrl( = (int) wParam),&nmd);
      

  2.   

    同意楼上,TCN_SELCHANGE是一个通知消息,这个通知码是包含在WM_NOTIFY的lParam参数中的。
      

  3.   

    这是我加在对话框的OnInitDialog里的代码:WPARAM wParam;
    LPARAM lParam;
    NMHDR nmhdr;
    wParam=(WPARAM)m_tabCtrl.m_hWnd;
    nmhdr.idFrom=IDD_SEND_DIALOG;
    nmhdr.hwndFrom=this->m_hWnd ;
    nmhdr.code=TCN_SELCHANGE;
    lParam=(LPARAM)&nmhdr;
    PostMessage(WM_NOTIFY,wParam,lParam);
    出现assert错误
      

  4.   

    nmhdr.idFrom=IDD_SEND_DIALOG乃是tabctal的id!!!!下同
      

  5.   

    改成:
    WPARAM wParam;
    LPARAM lParam;
    NMHDR nmhdr;
    wParam=(WPARAM)m_tabCtrl.m_hWnd;
    nmhdr.idFrom=IDC_TAB1;
    nmhdr.hwndFrom=m_tabCtrl.m_hWnd;
    nmhdr.code=TCN_SELCHANGE;
    lParam=(LPARAM)&nmhdr;
    BOOL bool1=PostMessage(WM_NOTIFY,wParam,lParam);
    还是一样啊
    怎么wParam和nmhdr.hwdnfrom一样?
    我跟踪看了一下,bool1返回的是TRUE(1)
    但是OninitDialog执行完后出现一堆汇编代码,并在某处出错:0047E037   jne         CWnd::OnNotify+55h (0047e019)
    2101:     ASSERT(::IsWindow(hWndCtrl));
    0047E039   mov         edx,dword ptr [hWndCtrl]
    0047E03C   push        edx
    0047E03D   call        dword ptr [__imp__IsWindow@4 (005f3db0)]
    0047E043   test        eax,eax
    0047E045   jne         CWnd::OnNotify+97h (0047e05b)
    0047E047   push        835h
    0047E04C   push        offset THIS_FILE (005dc714)
    0047E051   call        AfxAssertFailedLine (004d5720)
    0047E056   test        eax,eax
    0047E058   je          CWnd::OnNotify+97h (0047e05b)
    0047E05A   int         3              //出错时光标的位置
    0047E05B   xor         eax,eax
    0047E05D   test        eax,eax
    0047E05F   jne         CWnd::OnNotify+75h (0047e039)
    2102:
    2103:     if (_afxThreadState->m_hLockoutNotifyWindow == m_hWnd)
      

  6.   

    所以我怀疑是不是我这段代码不应该放在对话框的OnInitDialog里,而是应该放在别的地方?
      

  7.   

    启动一个任务线程来作,或者OnTimer中处理,加上IsWindows,getSafehwnd等的判断
      

  8.   

    还要启动一个线程啊??我只是启动时从注册表读一个值,然后根据这个值改变TabCtrl的显示卡片,然后发个消息通知而已,真的得用一个线程?