四)、进入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”),以sizeof(str)/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是字体的透明度,RGB是Red,Green,Blue(三原色),即字体的颜色。
graphics.DrawString(L"祝你幸福、快乐!", -1, &font, pointF, &solidBrush);//调用DrawString方法画出字符串。
使用上面的API几乎可以实现你想要的任何文字输出,不过这些API属于GDI+里面的内容,所以还要配置一下GDI+环境:
加入头文件:
#include
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注释掉