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型。
展开
 我来答
烟火岁月品清欢
2009-07-13 · TA获得超过1627个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:202万
展开全部
在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
lz3272
2009-07-13 · TA获得超过333个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:355万
展开全部
最好关联一个Control变量m_Com;
CString strTemp;
int cursel = m_Com.GetCurSel();
m_Com.GetLBText(cursel,strTemp);

或者把 属性---Styles-----Type:改成Drop List

你可以试一下
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式