mfc如何让组合框响应消息
我做组合框,给它关联了CString型变量m_n,用的closeup来响应,函数体里将m_n做判断,来调用函数setn()。每次收起组合框的时候,m_n没传进去。点两次才...
我做组合框,给它关联了CString型变量m_n,用的closeup来响应,函数体里将m_n做判断,来调用函数setn()。每次收起组合框的时候,m_n没传进去。点两次才能传进去。这是怎么回事?
是不是有更好的方法?先谢谢各位了~~
函数里的代码如下
UpdateData();
if (m_n=="127")
Sig1.SetN(127);
else if(m_n=="128")
Sig1.SetN(128);
else if(m_n=="64")
Sig1.SetN(64);
else if(m_n=="63")
Sig1.SetN(63);
else if(m_n=="33")
Sig1.SetN(33);
else Sig1.SetN(32);
//setn()的入口参数为int型。 展开
是不是有更好的方法?先谢谢各位了~~
函数里的代码如下
UpdateData();
if (m_n=="127")
Sig1.SetN(127);
else if(m_n=="128")
Sig1.SetN(128);
else if(m_n=="64")
Sig1.SetN(64);
else if(m_n=="63")
Sig1.SetN(63);
else if(m_n=="33")
Sig1.SetN(33);
else Sig1.SetN(32);
//setn()的入口参数为int型。 展开
展开全部
在MFC编程中,对于系统默认的消息,我们可以采用向导来快速的实现添加消息映射函数,其实我们也可以通过自己的手动添加代码,来实现自定义的消息映射函数,下面以单文档程序为例,在鼠标左键按下的时候,发送一个自定义消息,并添加消息处理函数:
1.在需要添加消息的类的头文件中,定义自定义消息.
本例中,在CView类的头文件,定义一个自定义消息
#define WM_MYMESSAGE 2008
注意,采用宏定义消息的时候,要注意消息的范围,系统处理消息的最大值是WM_USER ,可以转到定义出看,WM_USER的值为1024,我们可以自定义的消息是任何大于改数的一个值.
2.添加消息函数的声明.
在类的头文件中添加消息函数的声明:
class CMyView : public CView
{
protected: // create from serialization only
CMyView();
DECLARE_DYNCREATE(CMyView)
// Attributes
public:
CMyDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CMyView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg void DoMyMessage(WPARAM wParam,LPARAM lParam);//添加自定义消息处理函数声明
};
3.在类的实现部分的消息映射部分,添加消息映射
BEGIN_MESSAGE_MAP(CMyView, CView)
//{{AFX_MSG_MAP(CMyView)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(WM_MYMESSAGE,CMyView::DoMyMessage) //这个是自己添加的消息隐射(注意不要加分号)
END_MESSAGE_MAP()
4.编写消息处理函数
void CMyView::DoMyMessage(WPARAM wParam,LPARAM lParam)
{
CString str;
str.Format("x=%d y=%d",wParam,lParam);
MessageBox(str);
}
5.再需要发送消息的地方发送消息.
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// MessageBox("DOWN!");
PostMessage(WM_MYMESSAGE,point.x,point.y);
// SendMessage()
CView::OnLButtonDown(nFlags, point);
}
在鼠标左键按下的时候,发送消息,消息的两个参数包含了鼠标的横坐标和纵坐标.
注意,发送消息可以采用SendMessage或者PostMessage,前者等待消息响应再返回,后者立即返回.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/likefermat/archive/2008/10/07/3030263.aspx
1.在需要添加消息的类的头文件中,定义自定义消息.
本例中,在CView类的头文件,定义一个自定义消息
#define WM_MYMESSAGE 2008
注意,采用宏定义消息的时候,要注意消息的范围,系统处理消息的最大值是WM_USER ,可以转到定义出看,WM_USER的值为1024,我们可以自定义的消息是任何大于改数的一个值.
2.添加消息函数的声明.
在类的头文件中添加消息函数的声明:
class CMyView : public CView
{
protected: // create from serialization only
CMyView();
DECLARE_DYNCREATE(CMyView)
// Attributes
public:
CMyDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CMyView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg void DoMyMessage(WPARAM wParam,LPARAM lParam);//添加自定义消息处理函数声明
};
3.在类的实现部分的消息映射部分,添加消息映射
BEGIN_MESSAGE_MAP(CMyView, CView)
//{{AFX_MSG_MAP(CMyView)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(WM_MYMESSAGE,CMyView::DoMyMessage) //这个是自己添加的消息隐射(注意不要加分号)
END_MESSAGE_MAP()
4.编写消息处理函数
void CMyView::DoMyMessage(WPARAM wParam,LPARAM lParam)
{
CString str;
str.Format("x=%d y=%d",wParam,lParam);
MessageBox(str);
}
5.再需要发送消息的地方发送消息.
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// MessageBox("DOWN!");
PostMessage(WM_MYMESSAGE,point.x,point.y);
// SendMessage()
CView::OnLButtonDown(nFlags, point);
}
在鼠标左键按下的时候,发送消息,消息的两个参数包含了鼠标的横坐标和纵坐标.
注意,发送消息可以采用SendMessage或者PostMessage,前者等待消息响应再返回,后者立即返回.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/likefermat/archive/2008/10/07/3030263.aspx
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询