手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

Windows编程基础 - 文本显示

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  前一章所介绍的程式只创建了一个的窗口,但是除了窗口的标题栏中显示的窗口名之外,并未用他显示其他信息。应用程式能够在窗口的用户区内显示文本和图像信息。本章仅讨论文本行的显示。通过本章的程式实例,我们将介绍几个用于文本输出的Windows函数连同有效和无效矩形区的概念。同时介绍有关设备对象和字体尺寸的基本概念。这里,我们还将介绍几个重要的Windows消息。应用程式能够利用这些消息进行程式的初始化和终止处理,连同完成应用程式的任务等。

2.1、显示信息
  下面的程式从用户区的左上角开始显示“Hello,Welcome to Windows”。

  // 2-1.c 显示信息
  #include <windows.h>

  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

  int PASCAL WinMain(
    HINSTANCE hInstance,
   // 应用程式的实例句柄
    HINSTANCE hPrevInstance, // 该应用程式前一个实例的句柄
    LPSTR lpszCmdLine,    // 命令行参数串
    int nCmdShow )      // 程式在初始化时如何显示窗口
  {
     char szAppName[] = "DispText";
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;

    if (!hPrevInstance) {
      // 该实例是程式的第一个实例,注册窗口类
      wndclass.style = CS_VREDRAW | CS_HREDRAW;
      wndclass.lpfnWndProc = WndProc;
      wndclass.cbClsExtra = 0;
      wndclass.cbWndExtra = 0;
      wndclass.hInstance = hInstance;
      wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
      wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
      wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
      wndclass.lpszMenuName = NULL;
      wndclass.lpszClassName = szAppName;

      if (!RegisterClass(&wndclass))
        // 假如注册失败
        return FALSE;
    }

    // 对每个实例,创建一个窗口对象
    hwnd = CreateWindow(
      szAppName,
      "Display Text",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
      CW_USEDEFAULT, CW_USEDEFAULT,
      NULL,
      NULL,
      hInstance,
      NULL );

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0)) {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }

    return msg.wParam;
  }


  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  {
    char msg[] = "Hello, Welcome to Windows!";
    PAINTSTRUCT ps;
    HDC hDC;

    switch(message)
    {
      case WM_PAINT:
        hDC = BeginPaint(hwnd, &ps);
        TextOut (hDC, 0, 0, msg, sizeof(msg) - 1);
        EndPaint(hwnd, &ps);
        return 0;

      case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
  }


  我们首先介绍这个程式中使用的Windows数据类型,然后介绍和这几个类型有的Windows函数,最后介绍消息WM_PAINT的含义。
  HDC是在Windows.h中定义的一个数据类型,类似于HWND,他是用于标识一个设备对象的句柄;许多绘图函数需要这个句柄,这些绘图函数在这个句柄标识的对象上绘图。
  PAINTSTRUCT结构类型的变量所包含的信息可被用来重新绘制窗口的用户区域,下面的定义中只给出应用程式关心的几个域,其他未列出的域是供Windows系统使用的。

  typedef struct tagPAINTSTRUCT {
    HDC hdc;
   // 标识显示设备对象的句柄
    BOOL fErase; // 若为非零。说明用户背景已被重画过,否则未被重画
    RECT rcPaint; // 指定需要重画(着色)的矩形区域的左上角和右下角坐标
    //......

  } PAINTSTRUCT;

  其中,类型RECT的说明为:

  typedef struct tagRECT {
    int left;
  // 矩形左上角的X坐标值
    int top;   // 矩形左上角的Y坐标值
    int right;  // 矩形右上角的X坐标值
    int bottom; // 矩形右上角的Y坐标值
  

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!