Windows应用程序-文本显示

居中显示一幅春联,字体不限,黄色 RGB(255,255,0)

MFC文本显示

#include<windows.h>
#include<stdlib.h>
#include<string.h>

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
HWND hWndMain;

//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG Message;
	if (!InitWindowsClass(hInstance))
		return FALSE;
	if (!InitWindows(hInstance, nCmdShow))
		return FALSE;
	while (GetMessage(&Message, 0, 0, 0)) //消息循环
	{
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	return Message.wParam;
}
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
{
	static long nYChar;
	int pointx, pointy; 
	int i, j;
	HDC hDC;   				    // 定义指向设备环境的句柄
	HFONT DuiLian_Font;         // 定义字体句柄
	HBRUSH hBrush;              // 定义只指向画刷的句柄
	HPEN hPen;                  // 定义指向画笔的句柄
	TEXTMETRIC tm;				// 存放字体各种属性的结构体变量
	PAINTSTRUCT PtStr; 			// 指向包含绘图信息的结构体变量
	static char hengpi[] = { "迎春接福" };
	static char *duilian[2] = { { "春到百花香满地" },{ "时来万事喜临门" } };

	switch (iMessage)  		    //处理消息
	{
	case WM_CREATE:	// 窗口创建
		return 0;
	case WM_PAINT: 				// 处理重画消息
		hDC = BeginPaint(hWnd, &PtStr); 		// 开始绘图

		// 绘制对联背景
		hPen = CreatePen(PS_INSIDEFRAME, 3, RGB(255, 0, 0)); //红色实线 
		hBrush = CreateSolidBrush(RGB(255, 0, 0)); // 绿色水平阴影画刷
		SelectObject(hDC, hBrush); // 选择画刷
		SelectObject(hDC, hPen); // 选择画笔
		Rectangle(hDC, 100, 30, 300, 80); // 绘制横批背景
		Rectangle(hDC, 100, 100, 150, 395); // 绘制上联背景
		Rectangle(hDC, 250, 100, 300, 395); // 绘制下联背景

		// 输出对联内容
		DuiLian_Font = CreateFont(		 	// 创建自定义字体
			40,			                    // 字体的高度
			0,		                        // 由系统根据高宽比选取字体最佳宽度值
			0,			                    // 文本的倾斜度为0,表示水平
			0,			                    // 字体的倾斜度为0
			FW_HEAVY,                       // 字体的粗度,FW_HEAVY为最粗
			0,			                    // 非斜体字
			0,			                    // 无下划线
			0,			                    // 无删除线
			ANSI_CHARSET,	                // 表示所用的字符集为ANSI_CHARSET
			OUT_DEFAULT_PRECIS,		        // 输出精度为缺省精度
			CLIP_DEFAULT_PRECIS,            // 剪裁精度为缺省精度
			DEFAULT_QUALITY,		        // 输出质量为缺省值
			DEFAULT_PITCH | FF_DONTCARE,    // 字间距和字体系列使用缺省值
			"粗体字"); 		                //字体名称	
		SetTextColor(hDC, RGB(255, 255, 0)); // 设置字体颜色为黄色
		SetBkMode(hDC, TRANSPARENT); // 设置字体背景为透明
		SelectObject(hDC, DuiLian_Font); // 载入字体到当前设备环境
		GetTextMetrics(hDC, &tm); 			// 获取字体信息
		nYChar = tm.tmHeight + tm.tmExternalLeading;	// 字符高度
		SetTextCharacterExtra(hDC, 12); // 设置字符横向间距
		TextOut(hDC, 110, 35, hengpi, strlen(hengpi));//用当前字体输出文本
		for (i = 2; i > 0; i--)
		{
			for (j = 0; j < 7; j++)				// 输出文本
			{
				pointx = 105 + (i - 1)*150;
				pointy = 105 + j*nYChar;
				TextOut(hDC, pointx, pointy, duilian[2 - i] + j * 2, 2);
			}
		}
		EndPaint(hWnd, &PtStr); 
		return 0; 		// 结束绘图
	case WM_DESTROY: // 结束应用程序
		PostQuitMessage(0);	
		return 0;
	default:	
		return(DefWindowProc(hWnd, iMessage, wParam, lParam));
	}
}

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow) // 初始化窗口
{
	HWND hWnd;
	hWnd = CreateWindow("WinFill", "文本显示", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); // 生成窗口
	if (!hWnd)
		return FALSE;
	hWndMain = hWnd;
	ShowWindow(hWnd, nCmdShow);	//显示窗口
	UpdateWindow(hWnd);
	return TRUE;
}

BOOL InitWindowsClass(HINSTANCE hInstance)	//定义窗口类
{
	WNDCLASS WndClass;
	WndClass.cbClsExtra = 0;
	WndClass.cbWndExtra = 0;
	WndClass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, "END");
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = WndProc;
	WndClass.lpszClassName = "WinFill";
	WndClass.lpszMenuName = NULL;
	WndClass.style = CS_HREDRAW | CS_VREDRAW;
	return RegisterClass(&WndClass);
}
发帖时间: MFC