65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (24投票s)

2000 年 6 月 15 日

viewsIcon

320949

downloadIcon

3191

一个简单的分步教程,演示如何创建一个不使用 MFC 文档/视图体系结构的 SDI 应用程序。

引言

在本教程中,我们将使用 AppWizard 创建一个简单的 SDI 程序,该程序将在其窗口中间显示最后按下的按键。我假设你对 C++ 和多态性有很好的了解。我也假设你之前已经接触过 Windows 并且对 Windows 程序比较熟悉。

1. 选择项目类型

创建新项目的第一个步骤是从“”菜单中选择“”。也可以使用 CTRL + N 键盘快捷方式。单击“项目”选项卡以获取可用项目类型的列表。在本例中,我们将创建一个 MFC 程序,因此选择 MFC“AppWizard (exe)”。AppWizard 是一个向导,它将创建 3 种典型程序中的一种:

  1. SDI 程序
  2. MDI 程序
  3. 基于对话框的程序

在“项目”字段中输入你的程序名称。在本例中,我们将项目命名为 SDIPROG。如果需要,请更改位置,然后按 OK

2. AppWizard - 第一步

选择你想要创建的项目,在本例中是“单一文档”。这将创建一个在主框架内具有单个查看窗口的应用程序。取消选中“文档/视图体系结构支持”复选框,然后按“一步”。如果你指定要使用文档/视图体系结构,那么向导将创建 CDocumentCView 的派生类。CDocument 派生类是所有数据应存储和处理的地方,而 CView 派生类用于显示这些数据。在本例中,我们将不使用此体系结构,而是使用一个简单的 CWnd 派生类,该类将在一个地方处理数据和呈现。

3. AppWizard - 第二步 - 第三步

接受默认设置,然后按“一步”。

4. AppWizard - 第四步 - 第五步

你可以尝试这些对话框中的设置,但在本教程中,你应该只按“一步”。

5. AppWizard - 第六步

按“完成”。将弹出一个对话框,告知你已选择的设置。按 OK

6. 视图

创建项目后,AppWizard 将生成多个类。其中一个是“视图”。视图是程序中不属于框架的部分,包括边框、标题栏、菜单和工具栏。AppWizard 创建一个名为 CChildView 的类来封装视图。使用 CChildView,你可以对视图执行操作,并接收发送到视图的输入。

7. 在视图中绘制

我们要做的第一件事是在 CChildView 中添加一个名为 m_strTextCString 成员变量。

// 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 函数。

当用户在视图中输入字符时,会调用 OnCharClassWizard 创建的代码:

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 然后……等待。:)

现在我们已经通过了复杂的构建阶段,程序应该已经启动了。单击视图并开始键入。文本应该会根据你输入的字符进行绘制。

延伸阅读

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.