Windows程序举例

更新时间:2023-07-17 10:54:08 阅读: 评论:0

一个Windows程序必须有一个名为WinMain的主函数。WinMain函数是Windows应用程序开始执行时的入口点,它的返回类型为int。其作用十分类似于C应用程序的main函数。
Windows环境下,可以运行同一个程序的多个拷贝,每一个拷贝都是该应用程序的一个句柄,每个实例使用一个实例句柄进行标识。hInstance是标识当前程序的实例的句柄,它的值不会为NULL。如果在此之前Windows中已经运行了该程序的另一个实例,则这个实例的句柄由参数hPrevInstace给出。如果在运行该程序时,除夕有什么风俗Windows环境中不存在该程序的另一个实例,则hPrevInstanceNULL

   #include <windows.h>
  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  int PASCAL WinMain(
    HINSTANCE hInstance,   // 应用程序的实例句柄
    HINSTANCE hPrevInstance, // 该应用程序前一个实例的句柄
    LPSTR lpszCmdLine,    // 命令行参数串
    int nCmdShow)      // 程序在初始化时如何显示窗口
  {
    char szAppName[] = "Window";
    HWND hwnd; //主窗口句柄(句柄为窗口windows中的标识)
    MSG msg;  //定义windows消息数据结构
    WNDCLASS wndclass; //定义窗口类
    if (!hPrevInstance) //判断是否有其他应用程序实例在运行
/*同一个类只能向Windows注册一次,此处通过判别hPrevInstance的值是否为NULL,来决定是否应向Windows注册窗口类,从而保证了只在该程序的第一个实例中注册窗口类。*/
    {
慈禧光绪      // 该实例是程序的第一个实例,注册窗口类
      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,            ∥窗口类名
      "Sample Program",      ∥窗口标题名
            WS_OVERLAPPEDWINDOW, ∥创建窗口的样式
      CW_USEDEFAULT, CW_USEDEFAULT, ∥窗口左上角坐标
      CW_USEDEFAULT, CW_USEDEFAULT, ∥窗口宽度和度高
      NULL,    ∥该窗口的父窗口句柄
      NULL,    ∥窗口主菜单句柄
      hInstance,    ∥应用程序当前句柄
      NULL); ∥指向传递给窗口的参数值的指针
    ShowWindow(hwnd, nCmdShow); //显示窗口,nCmdShow指定显示方式
    UpdateWindow(hwnd); //刷新窗口用户区
    while(GetMessage(&msg, NULL, 0, 0)) //建立消息循环
{
      TranslateMessage(&msg); //将键盘消息翻译成Windows字符集
      DispatchMessage(&msg);// 将消息发送到窗口处理
    }
    return msg.wParam;
  }
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message)
    {
     ca WM_DESTROY:
      PostQuitMessage(0);//将消息WM_QUIT消息放入应用程序的消息队列中
          return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
  }
1. 输出文本举例:
WndProc窗口函数中加入一下定义:
    HDC    hdc;
    PAINTSTRUCT    ps;
    char MsgLBTN[]="你刚按下了鼠标左键!";
    char MsgRBTN[]="你刚按下了鼠标右键!";
    char str1[]="输出文字1毒鲉!";
    char str2[]="输出文字2";
在相应消息中加入WM_PAINT消息:
    ca WM_PAINT:
            {
            hdc = BeginPaint(hwnd, &ps);//绘制图形开始
            TextOut(hdc, 10, 40, str1, strlen(str1));
            TextOut(hdc, 40, 90, str2, strlen(str2));
            EndPaint(hwnd, &ps); //绘制图形结束
            return 0;//若无此句看看结果怎么样?
            }
2. WndProc窗口函数中加入一下定义:
能源动力类专业    HDC                hdc;
    PAINTSTRUCT        ps;
    RECT            rc;
微观经济学创始人在相应消息中加入WM_PAINT消息:
    ca WM_PAINT:
                hdc    = BeginPaint( hwnd, &ps );
                GetClientRect( hwnd, &rc );        // 获取窗口客户区大小
                DrawText( hdc, TEXT("Hello Windows!"), -1, &rc,
                            DT_SINGLELINE | DT_CENTER |DT_VCENTER );
                EndPaint( hwnd, &ps );
                  return 0 ; 
看看输出结果。
TextOut()函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置。
函数原型
BOOL TextOut(
HDC hdc, // 设备描述表句柄
int nXStart, // 字符串的开始位置 x坐标
int nYStart, // 字符串的开始位置 y坐标
LPCTSTR lpString, // 字符串
int cbString // 字符串中字符的个数
);
DrawText()函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。
函数原型
驯鹿怎么读
int DrawText(
  HDC        hDC,            // 绘制设备的句柄
  LPCTSTR    lpString,        // 要绘制的文本
  int        nCount,          // 文本的字符个数
  LPRECT    lpRect,        // 参考矩形
  UINT        uFormat          // 文本绘制格式
);
说明:
当nCount为1时,表示lpString指定的是以“\0”为结尾的字符串,并自动计算该字符串的字符个数。lpRect是一个指向RECT类型的“矩形”结构指针,该“矩形”结构含有left、top、right
和bottom 4个LONG域。为了能在窗口客户区中间绘制文本,该函数的lpRect被填为RECT变量rc的指针,它通过调用GetClientRect函数,获取hwnd窗口的客户区大小。同时,指定uFormat格式为DT_SINGLELINE(单行输出)、DT_CENTER(水平居中)和DT_VCENTER(垂直居中)。
LOGFONTWindows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:
typedef struct tagLOGFONTA
{
LONG    lfHeight;    // 指定逻辑单位的字符或者字符元高度
LONG    lfWidth;    // 指定逻辑单位的字体字符的平均宽度
LONG    lfEscapement;    // 指定每行文本输出时相对于设备x轴的角度,其单位为1/10
LONG    lfOrientation;    // 指定字符基线相对于设备x轴的角度,其单位为1/10
LONG    lfWeight;//字体的粗细程度,其范围在01000之间, 正常为400,粗体为700,NULL表示默认粗细
BYTE    lfItalic;        //此值为TRUE时,字体为斜体
BYTE    lfUnderline;    // 此值为TRUE时,字体带下划线
BYTE    lfStrikeOut;    //此值为TRUE时,字体带删除线
BYTE    lfCharSet;        // 使用的字符集,如GB2312_CHARSET,CHINESEBIG5_CHARSET等。
BYTE    lfOutPrecision;    // 输出精度,与所要求的字体高度、宽度、字符方向及字体类型等相接近的程度
BYTE    lfClipPrecision;    // 指定剪辑精度,当字符的一部分超过剪辑区域时对字符的剪辑方式
BYTE    lfQuality;        //输出质量, GDI在匹配逻辑字体属性到实际的物理字体时所使用的
方式
BYTE    lfPitchAndFamily;// 字体的字符间距
CHAR    lfFaceName[LF_FACESIZE];//所使用的字体名称,如果为空,则使用系统默认的字体
} LOGFONTA
字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸等方面的属性。字样是字符书写和显示时表现出的特定模式。
例如,对于汉字通常有宋体、楷体、隶书、黑体以及魏碑林等多种字样;
字体风格主要表现为字体的粗细和是否倾斜等特点;

本文发布于:2023-07-17 10:54:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1101239.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字体   字符   实例   句柄   消息   指定   应用程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图