我的代码不能进入消息处理函数。
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);
}
就是这一部分,怎么也不能进行处理,不知道是哪里出了问题
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);
}
就是这一部分,怎么也不能进行处理,不知道是哪里出了问题
#define ID_ENDBUT 10010 ID要连续的。
我的两个id只是一个开始和一个结束,在我creaetwindows的时候,的确是连续的!而且是for循环出来的!所以问题应该不在这里吧?难道我定义按钮要全部在资源文件中定义id??我的按钮数量是不固定的,怎么办呀?
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.
ON_NOTIFY_RANGE( NM_DBLCLK, ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
改成
ON_NOTIFY_RANGE( ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
再试试
ON_ONTIFY_RANGE 的参数是
ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
如果你改成
ON_NOTIFY_RANGE( ID_STARTBUT, ID_ENDBUT,OnFileMenuItems )
我想会有比较大的问题。因为参数的数量不对!
而你的问题是 ON_ONTIFY_RANGE