创建您的第一个 Windows 应用程序






4.25/5 (24投票s)
2000 年 6 月 15 日

320949

3191
一个简单的分步教程,演示如何创建一个不使用 MFC 文档/视图体系结构的 SDI 应用程序。
引言
在本教程中,我们将使用 AppWizard
创建一个简单的 SDI 程序,该程序将在其窗口中间显示最后按下的按键。我假设你对 C++ 和多态性有很好的了解。我也假设你之前已经接触过 Windows 并且对 Windows 程序比较熟悉。
1. 选择项目类型
创建新项目的第一个步骤是从“文件”菜单中选择“新建”。也可以使用 CTRL + N 键盘快捷方式。单击“项目”选项卡以获取可用项目类型的列表。在本例中,我们将创建一个 MFC 程序,因此选择 MFC“AppWizard (exe)”。AppWizard
是一个向导,它将创建 3 种典型程序中的一种:
- SDI 程序
- MDI 程序
- 基于对话框的程序
在“项目名称”字段中输入你的程序名称。在本例中,我们将项目命名为 SDIPROG
。如果需要,请更改位置,然后按 OK。
2. AppWizard - 第一步
选择你想要创建的项目,在本例中是“单一文档”。这将创建一个在主框架内具有单个查看窗口的应用程序。取消选中“文档/视图体系结构支持”复选框,然后按“下一步”。如果你指定要使用文档/视图体系结构,那么向导将创建 CDocument
和 CView
的派生类。CDocument
派生类是所有数据应存储和处理的地方,而 CView
派生类用于显示这些数据。在本例中,我们将不使用此体系结构,而是使用一个简单的 CWnd
派生类,该类将在一个地方处理数据和呈现。
3. AppWizard - 第二步 - 第三步
接受默认设置,然后按“下一步”。
4. AppWizard - 第四步 - 第五步
你可以尝试这些对话框中的设置,但在本教程中,你应该只按“下一步”。
5. AppWizard - 第六步
按“完成”。将弹出一个对话框,告知你已选择的设置。按 OK。
6. 视图
创建项目后,AppWizard
将生成多个类。其中一个是“视图”。视图是程序中不属于框架的部分,包括边框、标题栏、菜单和工具栏。AppWizard
创建一个名为 CChildView
的类来封装视图。使用 CChildView
,你可以对视图执行操作,并接收发送到视图的输入。
7. 在视图中绘制
我们要做的第一件事是在 CChildView
中添加一个名为 m_strText
的 CString
成员变量。
// ChildView.h : interface of the CChildView class
//...
class CChildView : public CWnd
{
//...
protected:
CString m_strText;
//...
然后我们需要初始化 m_strText
,我们将通过在 CChildView
的构造函数中添加对 m_strText
构造函数的调用来做到这一点。
CChildView::CChildView() : m_strText(_T("The character you entered was:"))
{
//...
}
CChildView
有一个名为 OnPaint
的虚拟成员函数。OnPaint
由 Windows 调用,通知你的程序绘制/重绘视图。除其他事项外,这可能发生在视图创建时、视图被窗口“覆盖”时、窗口移动时或窗口大小更改时。当 AppWizard
创建你的程序时,它会将以下代码添加到你的 OnPaint()
函数中:
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CWnd::OnPaint() for painting messages
}
dc
是一个 CPaintDC
对象。CPaintDC
封装了一个设备上下文。设备上下文是指输出设备(如显卡或打印机)及其设备驱动程序。设备上下文用于在窗口中显示图形和文本。CPaintDC
的成员函数之一是 DrawText()
。DrawText()
允许你在设备上下文中绘制文本,在本例中是视图。DrawText()
需要一个矩形区域来绘制。我们将通过使用 GetClientRect
函数获取视图的矩形。接下来,我们将添加绘制 m_strText
内容的代码到视图中。
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect; // Create a CRect object
GetClientRect(rect); // Retrieve the view's rectangle into the rect object
// Draw the text in the middle of the view
dc.DrawText(m_strText, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// Do not call CWnd::OnPaint() for painting messages
}
8. 接收输入
当你的视图收到鼠标/键盘输入时,Windows 会向你的视图发送一条消息。要获取消息,你需要创建一个消息处理程序。你可以使用 ClassWizard
创建消息处理程序。
按 CTRL + W 启动 ClassWizard
。选择“类信息”选项卡,并在“消息筛选器”组合框中选择“子窗口”。
选择“消息映射”选项卡。从“消息”列表中选择 WM_CHAR
,然后按“添加函数”按钮。按“编辑代码”编辑新创建的 OnChar
函数。
当用户在视图中输入字符时,会调用 OnChar
。ClassWizard
创建的代码:
void CChildView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CWnd::OnChar(nChar, nRepCnt, nFlags);
}
在 OnChar
中,我们将添加代码来更改 m_strText
,然后让视图重绘。
void CChildView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
m_strText = _T("The character you entered was: ");
m_strText += (TCHAR)nChar;
Invalidate();
CWnd::OnChar(nChar, nRepCnt, nFlags);
}
Invalidate()
会告知你的视图重绘自身,并最终调用 OnPaint()
。
9. 构建和运行
构建程序是最复杂的一步——你必须按 F5 然后……等待。:)
现在我们已经通过了复杂的构建阶段,程序应该已经启动了。单击视图并开始键入。文本应该会根据你输入的字符进行绘制。
延伸阅读
- 有关 MFC 消息处理的更深入的介绍,请参阅 Daniel Kopitchinski 的 Windows 消息处理文章。
- 有关创建基于对话框的应用程序的分步教程,请参阅 Dr. Asad Altimeemy 的 对话框基础应用程序新手指南。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。