GUI 剖析之 进入windows GUI编程

来源:互联网 发布:阿里云 ecs 数据库 编辑:程序博客网 时间:2024/05/29 07:50

四)、进入windows GUI编程

现在假设您已经了解了windowsGUI编程的消息机制,也假设您学过C语言,那么现在就开始一起学习GUI编程吧,希望大家愉快。

1)想做什么就写什么

一、我想实现文本显示

上面说过,你要画什么东东,都建议在WM_PAINT消息里面执行,虽然也可以在其他消息里做,例如可以在自己定义的消息里:

WM_USER+1:

{

             HDC hdc=GetDC(hwnd);

                            //这里执行绘制

               ReleaseDC(hwnd,hdc);

 

}

如果在WM_PAINT消息里:

WM_PAINT:

{

         hdc=BeginPaint(hwnd,&ps);

//这里执行绘制

         EndPaint(hwnd,&ps);

}

好了现在来显示文本吧,其实很简单,调用WindowsAPI就行了

BOOL TextOut(

  __in  HDC hdc,

  __in  int nXStart,

  __in  int nYStart,

  __in  LPCTSTR lpString,

  __in  int cbString

);

 

例子:TextOut(hdc,100,100,TEXT("ZhengJinWei"),11);

这是GDI(Graphics Devices Interface 图形设备接口)里面的API,这里TextOut在横坐标像素100,纵坐标像素100的位置显示字符串“ZhengJinWei”,这个字符串长度为11,你也可以使用WCHAR str[256]=TEXT(“ZhengJinWei”),sizeofstr/sizeof(WCHAR)获取长度。不过我要跟你说明一点,使用这个API后你会发现文字有一个灰色背景,真的很讨厌,所以我建议用下面的API

Graphics graphics(hdc);//声明一个graphics对象

FontFamily  fontFamily(L"Times New Roman");//设置字体属性,这里用的是Times New Roman,你也可以设置其他属性,具体属性可以参考PPT中的文字属性。

Font        font(&fontFamily, 40, FontStyleRegular, UnitPixel);//设置字体属性,包括大小(40),类型等,你也可以用GetSystemMetrics(…)API 获取字体相关信息

PointF      pointF(x,y);//字符串显示的位置,具体是指字符串首个字符的左上角位置。

SolidBrush  solidBrush(Color(255, 255,255,255));//定义画刷,画刷的参数是Color(alpha,R,G,B), alpha是字体的透明度,RGBRed,Green,Blue(三原色),即字体的颜色。

graphics.DrawString(L"祝你幸福、快乐!", -1, &font, pointF, &solidBrush);//调用DrawString方法画出字符串。

使用上面的API几乎可以实现你想要的任何文字输出,不过这些API属于GDI+里面的内容,所以还要配置一下GDI+环境:

加入头文件:

#include <gdiplus.h>

using namespace Gdiplus;

#pragma comment (lib, "Gdiplus.lib")

加入静态库:

(加入静态库的方法参考:

如果您的编译器是VS(VS2010),打开属性页->C/C++->预处理器定义

如果是vc(vc6),工程->设置->连接)

Gdiplus.lib

 

加入全局变量:

Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;

初始化,进入main函数就开始执行:

Gdiplus::GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

销毁,main函数返回之前开始执行:

Gdiplus::GdiplusShutdown(m_pGdiToken);

stdafx头文件里的#define WIN32_LEAN_AND_MEAN注释掉

 

原创粉丝点击