大家好,又见面了,我是你们的朋友全栈君。
以下是完成输出文字的代码部分
#include <Windows.h> // windows程序所依赖的头文件
#pragma comment(lib,"winmm.lib")
#define WINDOW_WIDTH 800 // 窗口宽度
#define WINDOW_HEIGHT 600 // 窗口高度
#define WINDOW_TITLE L"第三讲:windows标准输出字符与图形" // 窗口标题名称
HDC g_hdc = NULL; // 定义全局设备环境句柄
BOOL InitRes(HWND hwnd); // 资源初始化
VOID PaintFunc(HWND hwnd); // 绘图函数
BOOL CleaupFunc(HWND hwnd); // 释放资源
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); // 窗口过程函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
// 一、设计完整窗口类型
WNDCLASSEX windclass = {
0 };
windclass.cbSize = sizeof(WNDCLASSEX); // 设计结构体的字节数大小
windclass.style = CS_HREDRAW | CS_VREDRAW; // 窗口样式
windclass.lpfnWndProc = WndProc; // 指向窗口过程函数的指针
windclass.cbClsExtra = 0; // 窗口类的附加内存
windclass.cbWndExtra = 0; // 窗口的附加内存
windclass.hInstance = hInstance; // 指定包含窗口过程的程序实例句柄
windclass.hIcon = (HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); // 窗口标题图标
windclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 指定窗口类的光标句柄
windclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 指定白色画刷句柄
windclass.lpszMenuName = NULL; // 窗口菜单
windclass.lpszClassName = L"CharGraphicDemo"; // 指定窗口类的名称
// 二、注册窗口类
if (!RegisterClassEx(&windclass))
return -1;
// 三、创建窗口
HWND hwnd = CreateWindow(L"CharGraphicDemo", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, METRICS_USEDEFAULT, METRICS_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
// 四、显示 更新窗口
MoveWindow(hwnd, 380, 100,WINDOW_WIDTH,WINDOW_HEIGHT,true); // 移动窗口
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
// 初始化资源
if (!InitRes(hwnd))
{
MessageBox(hwnd, L"资源初始化失败!", L"提示", 0);
return FALSE;
}
// 添加背景音乐
mciSendString(L"Open ./Music/轻音乐-天气预报背景音乐.mp3 alias music", 0, 0, 0);
mciSendString(L"play music repeat", 0, 0, 0);
// 五、消息循环过程
MSG msg = {
0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
// 六、窗口类的注销
UnregisterClass(L"CharGraphicDemo", windclass.hInstance); // 程序结束 注销类
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps; // 定义记录变量
switch (message)
{
case WM_PAINT: // 客户区重绘消息
g_hdc = BeginPaint(hwnd, &ps);
InitRes(hwnd);
EndPaint(hwnd, &ps);
ValidateRect(hwnd, NULL); // 更新客户区的显示
break;
case WM_DESTROY: // 若是窗口销毁消息
PostQuitMessage(0); // 向系统表明有线程终止请求,用来响应WM_DESTROY消息
break;
default: // 如果上面所有case条件都不符合,则执行该语句
return DefWindowProc(hwnd, message, wParam, lParam); // 调用缺少窗口过程
}
return 0;
}
BOOL InitRes(HWND hwnd) // 资源初始化
{
g_hdc = GetDC(hwnd); // 获取设备环境句柄
PaintFunc(hwnd);
ReleaseDC(hwnd, g_hdc); // 释放设备环境句柄
return TRUE;
}
VOID PaintFunc(HWND hwnd) // 绘图函数
{
HFONT hFont = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"微软雅黑"); // 创建字体
SelectObject(g_hdc, hFont); // 将字体迁入设备环境句柄
SetBkMode(g_hdc, TRANSPARENT); // 文字背景色为透明
// 定义三段文字字符串
wchar_t textFirst[] = L"星星之为,可以燎原;数风流人物还看今朝;";
wchar_t textsecond[] = L"与天奋斗,其乐无穷!与地奋斗,其乐无穷!与人奋斗,其乐无穷!";
wchar_t textthird[] = L"----------毛主席";
SetTextColor(g_hdc, RGB(50, 255, 50));
TextOut(g_hdc, 30, 150, textFirst, wcslen(textFirst));
SetTextColor(g_hdc, RGB(50, 50, 255));
TextOut(g_hdc, 30, 200, textsecond, wcslen(textsecond));
SetTextColor(g_hdc, RGB(50, 150, 50));
TextOut(g_hdc, 500, 250, textthird, wcslen(textthird));
DeleteObject(hFont); // 释放字体对象
}
BOOL CleaupFunc(HWND hwnd) // 释放资源
{
// 留给大家自己完成
return TRUE;
}
复制
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171005.html原文链接:https://javaforall.cn