c++ MFC中 如何在自己创建的函数中 ,调用按键的事件函数

比如MFC 的应用程序,其中有BUTTON1:IDC_BUTTON1,控件变量为:m_BUTTON1,它的单击代码:
void CShowgamewinlistDlg::OnButton1()
{
// TODO: Add your control notification handler code here
}
我的自建函数:
void showwin()
{
????????
}
问号这里要调用BUTTON1单击的事件函数,应该怎么填写
就是问号处要调用 void CShowgamewinlistDlg::OnButton1() 这个函数,具体格式怎么写??
void CShowgamewinlistDlg::OnButton1() 这个函数中的代码,不用去管它。

你建的函数也要属于这个对话框类,然后就可以直接调用了。

头文件中声明
afx_msg void showwin();

源文件中函数定义
voidCShowgamewinlistDlg::showwin()

{
OnButton1() ;

}追问

可行,产生新问题,原本showwin() 在任意函数中均可调用,现在不行,请问有没其他方法??
另外,我在回调函数void CALLBACK showwinre()中调用了showwin(),现在不能用了,这个怎么办呢,要是都写成您的那种格式,那么回调函数的格式又该怎么写,这个回调是给计时器函数用的。

追答

void showwin()
{
CShowgamewinlistDlg dlg;
dlg.OnButton1();
}

也可以在回调函数中PostMessage,在消息处理函数中调用属于类的函数。
如果OnButton1()中没有使用类成员,可以把代码放进showwin()里,在OnButton1()中调用showwin()

追问

那2句弹出错误和CE2hao给的答案弹出的错误是一样的。
.h的代码如下:
protected:
afx_msg void Onfindwinfirst();//(第57行)
怎改
postMessage,我感觉很复杂,希望用简单代码

追答

public:
afx_msg void Onfindwinfirst();

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-22
直接调用是调用不好的。
要创建一个对象,再通过对象调用。
或者将showwin()创建成CShowgamewinlistDlg类的函数。追问

所谓对象,指的是?是不是创建一个函数,代码写在里面,同时供按键事件和其他函数调用?

追答

CShowgamewinlistDlg Dlg;

Dlg.OnButton1;
但这样写没有意义,应该说是错的。
下面是正确做法:
可以用一个全局指针指向你所定义的那个对象。
定义全局变量 void *pvoid=NULL;
在CShowgamewinlistDlg 的初始化函数中写上代码pvoid=(void*)this;
在函数showwin()中添加代码:CShowgamewinlistDlg*pdlg=(CShowgamewinlistDlg*)pvoid;
pdlg->OnButton();

这样就可以调用函数了。

追问

void *pvoid=NULL;是加在#include 下面吧
错误如下:
.......cpp(298) : error C2248: 'OnButton' : cannot access protected member declared in class 'CShowgamewinlistDlg'
.......h(59) : see declaration of 'OnButton'
怎改

追答

在OnButton上一行加上public:

第2个回答  2013-10-22
如果都是在对话框类内的函数的话直接把button响应函数里面的操作独立放到一个成员函数里面,然后再button响应函数和你自己的函数里面调用这个函数就行了。
第3个回答  2013-10-23
就是窗口类指针->OnButton1();或者发BUTTON1单击事件的消息。追问

能给出具体消息的代码吗?这样的话,我既不需要把BUTTON变成PUBLIC:,也不需要把自建的函数加在CShowgamewinlistDlg ::中。

追答

我只知道这么多了,消息什么的我也不会发,不过你可以考虑把OnButton1里的逻辑再封一层函数,OnButton1中再调用这个函数,showwwin中也调这个函数。

c++ mfc中如何给CView中CButton添加点击事件?
自定定义一个消息处理函数,然后再消息映射那里添加一个消息和函数的映射关系,就好了。建议你新建一个对话框程序,然后添加按钮,就能看到系统添加的代码了,你拷贝下就好了。注意更换button的 ID。

C++MFC创建的浮动窗口的关闭按钮和隐藏窗体按钮的对应事件是什么?找...
系统再带的关闭,就是上面的那个红色按钮,他是调用的OnCancel函数,你可以在头文件中声明一个afx_msg void OnCancel();函数然后在cpp里实现这个函数就行了,方法里面想怎么写就怎么写,其次如果你是手动添加的这么一个关闭按钮,想让窗口关闭,函数里面可以写 OnOK();OnCancel();PostMessage(WM_CLOSE...

C++中什么函数来读取键盘的上下左右和回车键。以及什么函数可以画出一...
1. 如果是控制台程序,使用 GetAsyncKeyState 函数 我以前写个一个小程序,你可以参考一下 http:\/\/blog.csdn.net\/tunsanty\/archive\/2009\/07\/29\/4389697.aspx 2. 如果是MFC程序,你需要在PreTranslateMessage(MSG* pMsg)中捕获按键的消息,然后设置焦点(SetFocus())。类似下面的样子:BOOL CXXXDialog(...

MFC界面里如何实现点击一个按钮就调用了相应的c++处理函数呢?
为IDC_button1 添加消息响应函数。 比较简单的方法是在 ResourceView界面 双击此按钮,点确定。或者在ClassWizard中添加。在按钮的消息响应函数体中添加代码。在函数体中调用你写的C++函数。 如果该C++函数是本类中的函数,直接调用。如果不是该类中的函数,需要外部引用。具体不会的其他知识可以参考百...

C++ VS中用MFC新建子类继承CEdit类,给编辑框赋予初值,怎么实现?
其实,用户要在对话框中使用定制控件,必须用DDX或者SubclassDlgItem函数子类化控件,这时PreSubclassWindow一定会被调用。如果用户直接创建定制控件窗口,CWnd::CreateEx函数就一定会被调用,控件窗口一定会被子类化以安装MFC消息泵。所以在MFC中,PreSubclassWindow是创建窗口的必经之路。所以重写PreSubclassWindow...

MFC怎样处理键盘事件。想用mfc写个游戏,不知道怎样用键盘控制。_百度知 ...
MFC有个OnKeyDown函数,具体有三个参数。afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags );其中,第一个参数表示哪个按键。nChar Specifies the virtual key code of the given key. For a list of of standard virtual key codes, see Winuser.h 这些虚拟键值,有一些是系统常量,...

C++Windows编程问题,在一个窗口中怎么接收按钮被点击的消息?
首先要给按钮一个ID,然后在create的时候保存它的句柄(static HWND)。在WM_COMMAND消息里写响应函数,用switch进行选择。如下代码:define BUTTON_ID 10011 \/\/按钮IDLRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wp,LPARAM lp){HDC hdc;PAINTSTRUCT ps;static HWND btnWnd;static bool ...

C++ MFC对话框初始化完成(即所有的控件已经创建完成)后的第一个函数是...
那就要略微复杂一点了,最简单的方法是用定时器,在OnInitDialog或者OnShowWindow里面SetTimer( 1 , 200 , NULL );然后给对话框添加OnTimer消息,OnTimer( UINT nIdEvent ){ if(nIdEvent ==1 ){ AddString()KillTimer( 1 );} } 这样就实现了显示对话框以后再等200毫秒再添加了一行文本 ...

C++MFC模式下List Control怎么实现双击获取内容
\/\/以下是消息响应函数 void CCListCtrlTestDlg::OnDblClkItem(){ \/\/获取选中的的一个位置 POSITION p=m_listCtrl.GetFirstSelectedItemPosition();if (p == NULL){ TRACE("没有行被选中!");} \/\/获取刚选取的位置的下标(从0开始的)int index = m_listCtrl.GetNextSelectedItem(p);\/\/获得选中...

如何在MFC中添加鼠标右击事件?
1.单击Project|Add to Project|Components and Controls 2.双击Visual C++ Components目录,选择Pop_up Menu组件 3.单击Insert,确定 4.在Add Pop_up menu to下拉列表中选择视图类对应工程的视图类 5.单击OK就建立了默认的右键菜单 6.修改右键菜单为你想要的右键菜单(修改ID值来实现)

相似回答