打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Windows程序设计——GDI字符及图形标准输出标准输出

以下是完成输出文字的代码部分

#include <Windows.h>// windows程序所依赖的头文件
#pragma comment(lib,"winmm.lib")

#define WINDOW_WIDTH800// 窗口宽度
#define WINDOW_HEIGHT600// 窗口高度
#define WINDOW_TITLEL"第三讲: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;
}


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VC 中用 IPicture 在窗口中显示图片文件
编写一个程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,且每隔四分之一周期,圆的填充色和圆的周边颜色都发生变化,同时圆的半径在四分之一周期之内由正弦曲线幅值的0.2倍至0.6倍线性增长。
孙鑫VC视频教程笔记之第一课“Windows程序的内部运行原理”
No MFC,Only API - 菜单的创建和使用
Windows 程序内部运行机制
windows程序设计(5)使用滚动条
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服