MFC中文档类和视图类中MessageBox的不同,Invalidate()在文档类使用是未申明变量

最近写程序想把读数据分开到文档类里,结果出现一堆之前没遇到的问题,例如MessageBox的用法还不一样了,以及我想读完文件后让窗口更新一下,结果发现Invalidate()这个函数在CDocument类里面是未声明的,在网上查阅相关资料后,总结了一下之前遇到的问题。

此为CDocument类里面打开文件的部分程序:


以下为CView类里的程序:


MessageBox()功能是一样的,也分为好几种不同类型的使用方式;

Windows API: MessageBox();

CWnd:MessageBox();

AfxMessageBox();

一、API函数Messagebox

原型如下:

int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

hWnd:指窗口句柄  lpText:要显示的文本 lpCaption:标题  uType:类型,例如:MB_OK,MB_YESNO

二、 CWnd的成员函数MessageBox()

int  MessageBox(LPCTSTRlpszText,LPCTSTRlpszCaption=NULL,UINTnType=MB_OK);

CWnd已经指明了窗口句柄,所以这个成员函数不需要再有hWnd了。

例如:MessageBox(“Error”);//采用了c++的语法特性

三、MFC中的全局函数AfxMessageBox

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );

int AfxMessageBox(UINT nIDPrompt,UINT nTYpe,UINT nIDHelp);

第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello)。在第二种形式中,nIDPrompt为要显示的文本字符串在字符串表中的ID。AfxMessageBox没有HWND参数,也不能设置消息框标题(默认标题为应用程序的可执行文件名)

了解这三种形式之后,再看下MFC中这些类的框架


很显然,CDocument类没有继承CWnd的特性,而CFrameWnd和CView都是CWnd的子类。所以在CDocument类中使用的MessageBox其实是ApI函数,所以需要指定窗口,而在CView 中使用的MessageBox是无需指定窗口的

所以在非CWnd类中使用MessageBox是比较繁琐的,必须指定标题,文本,样式,当然也可以使用CWnd::MessageBox()或者AfxMesageBox();在使用MFC时,如果懒得记这些,就全部都用AfxMessageBox()最为方便。

此外,之前一直以为在MFC中就能使用Invalidate(),后来查MSDN才知道,Invalidate()是CWnd的成员函数,很显然CDocument不是CWnd的子类,所以没有它的申明和定义,因此学习MFC,了解MFC类的框架图是不可或缺的!

### 回答1: 在Qt中使用MFC的例子可以使用CString、MessageBoxMFC方法,具体如下: 1. 字符串操作:Qt中没有MFC的CString,但可以使用QString进行字符串操作。QString提供了丰富的字符串处理方法,如拼接字符串、查找子字符串、替换字符串等。 例如,使用MFC的CString进行字符串拼接可以如下所示: CString str1 = "Hello"; CString str2 = "World"; CString result = str1 + " " + str2; 而在Qt中,可以使用QString的arg()函数实现字符串的格式化拼接: QString str1 = "Hello"; QString str2 = "World"; QString result = QString("%1 %2").arg(str1).arg(str2); 2. 消息框:在MFC中,可以使用CMessageBox弹出对话框进行消息提示。 而在Qt中,可以使用QMessageBox实现似的功能。QMessageBox提供了丰富的静态函数用于弹出对话框,如information()、warning()、critical()等。它们分别用于显示不同型的消息框。 例如,使用MFC的CMessageBox弹出一个提示消息框可以如下所示: CMessageBox::Information("提示", "欢迎使用MFC"); 而在Qt中,可以使用QMessageBox的information()函数实现似的效果: QMessageBox::information(nullptr, "提示", "欢迎使用Qt"); 以上是在Qt中使用MFC的例子,使用了QString代替了MFC的CString,并使用了QMessageBox代替了MFC的CMessageBox,以实现字符串操作消息框的功能。 ### 回答2: 在Qt中使用MFC方法可以通过将MFC的头文件包含到Qt项目中来实现。下面是一个使用MFC的例子: 首先,在Qt项目的.pro文件中添加MFC库的链接,例如: ``` LIBS += -L"path/to/mfc/library" -lmfc140u ``` 然后,在Qt的代码中包含MFC的头文件定义MFC的字符串型`CString`。例如: ```cpp #include <afxwin.h> #include <afxdlgs.h> typedef CStringA MFCString; // 将CString转换为Qt项目中的String型 void showDialog() { MFCString message = "Hello MFC"; MessageBoxA(NULL, message, "MFC Example", MB_OK); } ``` 在上面的例子中,我们使用MFC的`MessageBoxA`方法显示一个消息框,同时使用MFC的`CString`字符串型。在Qt项目中,我们通过将`CString`定义为`CStringA`来使用MFC的字符串型,并将其转换为Qt项目中的字符串型。 这只是一个简单的例子,你可以根据实际需求,使用更多的MFC方法,在Qt项目中集成MFC的功能。需要注意的是,在使用MFC方法时,可能会存在一些平台相关性的问题,需要根据具体的情况进行调整处理。 ### 回答3: 在Qt中使用MFC的例子,可以使用MFC中的方法,如CStringMessageBox。 例如,我们可以在Qt中创建一个按钮,当点击这个按钮时,弹出一个消息框,消息框中显示一个使用CString拼接的字符串。 以下是一个使用MFC字符串消息框的示例代码: ```cpp #include <QtWidgets> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QPushButton *button = new QPushButton("点击我", this); connect(button, &QPushButton::clicked, this, &MainWindow::showMessageBox); } public slots: void showMessageBox() { CString str1 = _T("Hello"); CString str2 = _T("MFC"); CString concatStr; concatStr.Format(_T("%s %s"), str1, str2); QMessageBox::information(this, "消息框标题", (const char*)CT2CA(concatStr)); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow window; window.show(); return app.exec(); } #include "main.moc" ``` 在上面的例子中,我们在MainWindow的构造函数中创建了一个按钮,并连接了按钮的clicked信号到showMessageBox槽函数。当按钮被点击时,就会触发showMessageBox函数。 showMessageBox函数中,我们首先使用CString来创建两个字符串。然后使用CString的Format方法来将这两个字符串拼接成一个新的字符串。最后,我们使用QMessageBox::information方法创建一个消息框,并将拼接后的字符串转换成char*型的参数传进去,实现字符串的显示。 运行这个例子,当点击按钮时,就会弹出一个消息框,消息框中显示"Hello MFC"这个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值