×××××××××××
感觉这种事情太奇葩了,不知道是C++的语法有问题,还是MFC的问题,抑或是IDE的开发者有问题。
我认为不应该出现这个问题, 程序的主要心思应该放在逻辑的实现上,而不是把心思放在解决这些无谓的细节上面。
8 个解决方案
#1
MFC CWnd::MessageBox
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
API
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
API
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
#2
::MessageBox
#3
看参数就好 了
#4
VS是 如何判断 这个MessageBox 是API 里面的 还是CWnd 里面? 他们的名字都是一样。
还请 不吝赐教。。 谢谢
#5
如果是CWnd及其派生类中,MassageBox自然是默认你的写法,如果是文档类或者CApp类中,你的以上写法自然报错,应该提供参数完整的API函数,MFC程序中任意位置显示消息窗,用AfxMessageBox,
#6
你上一个应该不是放在MFC窗口类里面去调用的,实际调用的是win32的MessageBox:
你下一个是在MFC对话框里面调的,其实是调的CWnd封装过的MessageBox:
这跟IDE毛关系都没有,而是你自己没搞清楚。
int MessageBox( HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style);
你下一个是在MFC对话框里面调的,其实是调的CWnd封装过的MessageBox:
int MessageBox ( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK );
这跟IDE毛关系都没有,而是你自己没搞清楚。
#7
关于编译器判断的问题,没有加::标识的函数调用默认在类实现里面去找,加了::的函数调用默认在全局函数里面找,而且两个的参数都不一样,就算没加::,根据函数重载编译器也知道编译哪个版本的函数
#8
就是说如果 Cwnd及其派生类的里面的MassageBox ,就默认只需填写三个参数,
如果其他的类,比如文档类或是CApp类 就需要填写四个参数,第一个参数是 MassageBox的父窗口句柄。
后面三个参数,还是老样子。依次是:消息框的内容,消息框的标题,指定一个决定对话框的内容和行为的位标志集。
#1
MFC CWnd::MessageBox
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
API
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
API
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
#2
::MessageBox
#3
看参数就好 了
#4
VS是 如何判断 这个MessageBox 是API 里面的 还是CWnd 里面? 他们的名字都是一样。
还请 不吝赐教。。 谢谢
#5
如果是CWnd及其派生类中,MassageBox自然是默认你的写法,如果是文档类或者CApp类中,你的以上写法自然报错,应该提供参数完整的API函数,MFC程序中任意位置显示消息窗,用AfxMessageBox,
#6
你上一个应该不是放在MFC窗口类里面去调用的,实际调用的是win32的MessageBox:
你下一个是在MFC对话框里面调的,其实是调的CWnd封装过的MessageBox:
这跟IDE毛关系都没有,而是你自己没搞清楚。
int MessageBox( HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style);
你下一个是在MFC对话框里面调的,其实是调的CWnd封装过的MessageBox:
int MessageBox ( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK );
这跟IDE毛关系都没有,而是你自己没搞清楚。
#7
关于编译器判断的问题,没有加::标识的函数调用默认在类实现里面去找,加了::的函数调用默认在全局函数里面找,而且两个的参数都不一样,就算没加::,根据函数重载编译器也知道编译哪个版本的函数
#8
就是说如果 Cwnd及其派生类的里面的MassageBox ,就默认只需填写三个参数,
如果其他的类,比如文档类或是CApp类 就需要填写四个参数,第一个参数是 MassageBox的父窗口句柄。
后面三个参数,还是老样子。依次是:消息框的内容,消息框的标题,指定一个决定对话框的内容和行为的位标志集。