⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visual c++ mfc 简明教程.txt

📁 这一关于在windows 下设计管道的很好的参考资料
💻 TXT
📖 第 1 页 / 共 5 页
字号:
  通过修改不同的样式属性,你可以理解CStatic的不同形式。例如,下面的代码包含有对CTestWindow构造函数进行了修改,所产生的控制有个位移: 
  CTestWindow::CTestWindow()
  { 
  CRect r;
  // Create the window itself
  Create(NULL, 
  "CStatic Tests", 
  WS_OVERLAPPEDWINDOW,
  CRect(0,0,200,200));
  // Get the size of the client rectangle
  GetClientRect(&r);
  r.InflateRect(-20,-20);
  // Create a static label
  cs = new CStatic();
  cs->Create("Now is the time for all good men to \
  come to the aid of their country",
  WS_CHILD|WS_VISIBLE|WS_BORDER|SS_CENTER,
  r,
  this);
  }
  上面的代码除了所显示的文本比较长外没有什么不同。运行该代码你就可以看到,CStatic在指定的区域内的文本已经回绕了,且没一行都是居中的。
  如果边框矩形太小不能包含所有的文本行,则文本会被剪切以适应之。你减小矩形大小或增大字符串长度就可以看到CStatic的该特性。
  在我们所看到的所有代码中,样式SS_CENTER是用来居中文本的。CStatic也允许左对齐或右对齐。左对齐是用SS_LEFT来替代SS_CENTER属性。同样,右对齐是用SS_RIGHT来取代之。
  SS_LEFTNOWORDWRAP属性是用来关闭文本回绕的。它会强迫使用左对齐属性。
  CStatic的矩形显示模式
  CStatic也支持两种不同的矩形显示模式:填充矩形和框架。通常用这两种模式来把一组控制框在一起。例如,你可以把黑背景框架窗口作为一组编辑框的背景。你可以选择六种不同的样式: SS_BLACKFRAME、SS_BLACKRECT、SS_GRAYFRAME、SS_GRAYRECT、SS_WHITEFRAME和SS_WHITERECT。RECT形成了一个填充的矩形,而FRAME组成一边框。其中的颜色标志,如SS_WHITERECT表示其颜色与窗口背景的颜色是相同的。尽管该颜色的缺省值是白色,但你可以使用控制面板来改变,此时矩形的颜色可能就不是白色的了。
  当指定了矩形或框架属性后,CStatic的文本字符串会被忽略。典型情况是传递一空字符串。你可以试验以下这些特性。
  字体
  你可以使用CFont类来改变CStatic的字体。MFC中的CFont类保存着特殊Windows字体的单一实例。例如,一个实例的CFont类可能保存有18点的Times字体,而另一个可能保存着10点的Courier字体。你可以调用SetFont函数来修改字体。下面的代码给出了如何实现字体。
  CTestWindow::CTestWindow()
  { 
  CRect r;
  // Create the window itself
  Create(NULL, 
  "CStatic Tests", 
  WS_OVERLAPPEDWINDOW,
  CRect(0,0,200,200));
  // Get the size of the client rectangle
  GetClientRect(&r);
  r.InflateRect(-20,-20);
  // Create a static label
  cs = new CStatic();
  cs->Create("Hello World",
  WS_CHILD|WS_VISIBLE|WS_BORDER|SS_CENTER,
  r,
  this);
  // Create a new 36 point Arial font
  font = new CFont;
  font->CreateFont(36,0,0,0,700,0,0,0,
  ANSI_CHARSET,OUT_DEFAULT_PRECIS,
  CLIP_DEFAULT_PRECIS,
  DEFAULT_QUALITY,
  DEFAULT_PITCH|FF_DONTCARE,
  "arial"); 
  // Cause the label to use the new font
  cs->SetFont(font);
  }
  上面的代码开始于建立窗口和CStatic。然后建立一CFont类型对象。字体变量应作为CTestWindow的数据成员来说明“CFont *font”。CFont::CreateFont函数有15个参数,但是只有三个是最常用的。例如,36指定了以点为单位的字体大小,700指定了字体的密度(400是正常“normal”, 700为加黑“bold”,值的范围为1到1000。FW_NORMAL和FW_BOLD的含义实际上是相同的),“arial”是所用字体的名称。Windows 通常带有五种True Type字体(Arial、Courier New、Symbol、Times New Roman和Wingdings),使用它们,你可以确保任何机器上都会有该字体。如果你使用了系统不知道的字体,则CFont会选择缺省字体,正如你在本教程所见到的。
  要想更多的了解CFont类,可参见MFC文档。在API在线帮助文件中,有一篇文章对字体做了很好的概述。查找“Fonts and Text Overview”。
  SetFont函数是从CWnd继承来的。它是用来设置窗口的字体的,在我们的程序中是CStatic子窗口。你可能要问:“我怎样知道CWnd中的哪些函数可以用于CStatic在?”你只能在实践中来学习。花上一些时间来看一下CWnd的所有函数。你定会有所收获,并会发现哪些函数可用于定制控制。我们在选下一讲中看到CWnd类中的其它Set函数。
  结论
  在本教程中,我们勘察了CStatic的很多不同特性。有关从CWnd继承来的Set函数,我们将放到下一讲介绍,因为在那里更合适。
  查看Microsoft文档中的函数
  在Visual C++ 5.x中,查找你多不熟悉的函数是很简单的。所有的MFC、SDK、Windows API和C/C++标准库函数都继承到同一个帮助系统中了。如果你不能确定所要的函数在哪儿,你可以使用帮助菜单中的Search选项来查找。所有相关的函数都会列出来的。
  编译多个可执行程序
  在本教程中,有几个例子程序。有两种方式来编译和运行它们。第一种方式是把每个程序都放到自己的目录中,然后为每个程序分别建立一个项目。使用该技术,你可以分别编译每个程序,并且可以同时或独立地使用他们。该方法的缺点是需要比较大的磁盘空间。
  第二种方法是为所有的程序只建立一个目录。你可以一个项目文件。为了编译每个程序,你可以编辑项目和改变源文件。当你重新编译项目时,新的可执行程序就是你所选择的源文件的。该方法可以使用减少磁盘空间。



第四部分:消息映射
  应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。在上一讲中,你已经学习了CStatic控制和如何使用样式属性来定制用户界面对象的外观。这些概念可用于MFC中的所有不同控制类。
  在本讲中,我们将介绍CButton控制,以理解消息映射和简单的事件处理。然后还要介绍使用CScrollBar控制的稍微复杂点的例子。
  理解消息映射
  在第二讲中,MFC程序不包括主要函数或时间循环。所有的事件处理都是作为CWinApp的一部分在后台处理的。因为它们是隐藏的,所以我们需要一种方法来告诉不可见的时间循环通告我们应用程序所感兴趣的事件。这需要一种叫做消息映射的机制。消息映射识别感兴趣的事件然后调用函数来响应这些事件。
  例如,如果你要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。在程序中,你编写代码来建立按钮:你指示按钮应如何动作。然后,为其父窗口建立用户单击按钮时的消息映射,它试图要传递消息给其父窗口。为了建立父窗口的消息,你要建立截取消息映射的机制,并且使用按钮的消息。当一指定的按钮事件发生时,消息映射会请求MFC调用一指定的函数。在这种情况下,单击退出按钮就是所感兴趣的事件。然后你把退出应用程序的代码放到指定的函数中。
  其它的工作就由MFC来做了。当程序执行时,用户单击“退出”按钮时,按钮就会自己加亮。然后MFC自动调用相应的函数,并且程序会终止。只使用很少的几行代码你就响应了用户事件。
  CButton类
  在上一讲中所讨论的CStatic控制是唯一不响应用户时间的控制。Windows中所有的其它控制都可响应用户事件。第一,当用户处理它们时,它们会自动更新其外观(例如,当用户单击按钮时,按钮会自己加亮以给用户一个反馈)。第二,每个不同的控制都要发送信息给你的代码以使程序能响应用户的需要。例如,当单击按钮时,按钮就会发送一个命令消息。如果你编写代码接收消息,则你的代码就能响应用户事件。
  为了理解这个过程,我们从CButton控制开始。下面的代码说明了建立按钮的过程:
  // button1.cpp
  #include 
  #define IDB_BUTTON 100
  // Declare the application class
  class CButtonApp : public CWinApp
  {
  public:
  virtual BOOL InitInstance();
  };
  // Create an instance of the application class
  CButtonApp ButtonApp; 
  // Declare the main window class
  class CButtonWindow : public CFrameWnd
  { 
  CButton *button;
  public:
  CButtonWindow();
  };
  // The InitInstance function is called once
  // when the application first executes
  BOOL CButtonApp::InitInstance()
  {
  m_pMainWnd = new CButtonWindow();
  m_pMainWnd->ShowWindow(m_nCmdShow);
  m_pMainWnd->UpdateWindow();
  return TRUE;
  }
  // The constructor for the window class
  CButtonWindow::CButtonWindow()
  { 
  CRect r;
  // Create the window itself
  Create(NULL, 
  "CButton Tests", 
  WS_OVERLAPPEDWINDOW,
  CRect(0,0,200,200));
  // Get the size of the client rectangle
  GetClientRect(&r);
  r.InflateRect(-20,-20);
  // Create a button
  button = new CButton();
  button->Create("Push me",
  WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  r,
  this,
  IDB_BUTTON);
  }
  上面的代码与前面介绍的代码几乎相同。CButton类的Create函数共有5个参数。前四个与CStatic的相同。第五个参数为按钮的资源ID。资源ID是用来标识消息映射中按钮的唯一整数值。常数值IDB_BUTTON已经在程序的顶部做了定义。“IDB_”是任选的,只是该常量ID是用来表示按钮的。它的值为100,因为100以内的值都为系统所保留。你可以使用任何大于99的值。
  CButton类所允许的样式属性与CStatic类的是不同的。定义了11个不同的“BS”(“Button Style”)常量。完整的“BS”常量列表可在用Search命令查找CButton,并选择“button style”。这里我们要用的是BS_PUSHBUTTON样式,它表示我们要一正常的的按钮方式来显示该按钮。我们还使用了两个熟悉的“WS”属性: WS_CHILD和WS_VISIBLE。我们将在后面介绍其它一些样式。
  当你运行代码时,会注意到按钮响应了用户事件。既它加亮了。除此之外它没有做任何事情,因为我们还没有教它怎样去做。我们需要编写消息映射来使按钮做一些感兴趣的事情。
  建立消息映射
  下面的代码包含有消息映射,也包含有新的处理单击按钮的函数(当用户单击按钮时会响一下喇叭)。它只是前面代码的一个简单的扩充:
  // button2.cpp
  #include 
  #define IDB_BUTTON 100
  // Declare the application class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -