我的代码不能进入消息处理函数。
   RESOURCE.H
        #define ID_STARTBUT                     10000
        #define ID_ENDBUT                       10010    
   testdlg.h
        afx_msg void OnFileMenuItems(UINT nID,NMHDR * pNotifyStruct, LRESULT * pResult);
   testdlg.cpp
         消息响应部分
         BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
ON_NOTIFY_RANGE( NM_DBLCLK, ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
         END_MESSAGE_MAP()  
         动态按钮的产生部分
         for (int i=10000;i<=10010;i++)
{ str.Format("%d",i);

DWORD dwStyle = WS_CHILDWINDOW | WS_VISIBLE | BS_PUSHBUTTON;

m_hButton = ::CreateWindow("BUTTON",TEXT(str),dwStyle,
100*j,0,70,40,this->m_hWnd,NULL,AfxGetInstanceHandle(),(LPVOID)i);
j++;
::ShowWindow(m_hButton,SW_SHOW);
}
         按钮的id和ID_STARTBUT,ID_ENDBUT是对应的,而且在按钮的cation上可以看到了
                消息处理部分:
        void CTestDlg::OnFileMenuItems(UINT nID,NMHDR * pNotifyStruct, LRESULT * pResult)
{ CString temp;
temp.Format("%d",nID);
AfxMessageBox(temp);
}          
           就是这一部分,怎么也不能进行处理,不知道是哪里出了问题

解决方案 »

  1.   

    #define ID_STARTBUT                     10000
            #define ID_ENDBUT                       10010 ID要连续的。
      

  2.   

    flybirdlee:
          我的两个id只是一个开始和一个结束,在我creaetwindows的时候,的确是连续的!而且是for循环出来的!所以问题应该不在这里吧?难道我定义按钮要全部在资源文件中定义id??我的按钮数量是不固定的,怎么办呀?
      

  3.   

    MSDN上只此一种参数形式:ON_COMMAND_RANGE
    ON_COMMAND_RANGE( id1, id2, memberFxn )
    Parameters
    id1
    Command ID at the beginning of a contiguous range of command IDs.
    id2
    Command ID at the end of a contiguous range of command IDs.
    memberFxn
    The name of the message-handler function to which the commands are mapped.
      

  4.   

    我不是说了吗?要把:
    ON_NOTIFY_RANGE( NM_DBLCLK, ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
    改成
    ON_NOTIFY_RANGE( ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
    再试试
      

  5.   

    fwm1981:
         ON_ONTIFY_RANGE 的参数是
                ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
          如果你改成
                ON_NOTIFY_RANGE( ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
           我想会有比较大的问题。因为参数的数量不对!
      

  6.   

    哦,你的标题是ON_COMMAND_RANGE,我说的也是ON_COMMAND_RANGE,
    而你的问题是  ON_ONTIFY_RANGE