编写一个C程序,运行时输出以下图形_java图形程序设计之图片显示

编写一个C程序,运行时输出以下图形_java图形程序设计之图片显示以下是完成输出文字的代码部分#include <Windows.h> // windows程序所依赖的头文件#pragma comment(lib,”winmm.lib”)#define WINDOW_WIDTH 800 // 窗口宽度#define WINDOW_HEIGHT 600 // 窗口高度#define WINDOW…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

#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.net/171005.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月18日 上午7:46
下一篇 2022年8月18日 上午7:46


相关推荐

  • 内网渗透的步骤_内网渗透思路

    内网渗透的步骤_内网渗透思路0x00Preface内网渗透主要是基于前期外围打点getshell的webserver,通过收集webserver上的信息,然后对其他内网主机进行口令上的攻击,当然也有一些基于漏洞的攻击。内网相关概念这里不再进行介绍,大家可以自行百度,诸如什么是域、域与工作组的区别、什么是DC、什么是AD等。当然,概念是生涩难懂的,结合实际环境会有助于理解。0x01信息收集systeminfo查看系统详细信息,如OS版本、补丁安装情况,可以根据这些信息筛选可利用的漏洞。netstart查看启动进

    2025年11月17日
    5
  • windows上安装redis并安装php5.6的redis扩展

    windows上安装redis并安装php5.6的redis扩展

    2021年10月16日
    61
  • 分布式事务中的Saga模式「建议收藏」

    分布式事务中的Saga模式「建议收藏」微服务架构(MSA)已经变得非常流行。但是,一个常见问题是如何跨多个微服务管理分布式事务。当微服务架构将单体系统分解为自封装服务时,意味着单体系统中的本地事务现在分布到将按顺序调用的多个服务中。说到分布式事务,通常熟悉的是两阶段提交,TCC等常见模式。初次之外还有基于Saga实现的分布式事务。什么是Saga?Saga事务模型又叫做长时间运行的事务(Long-running-transact…

    2026年1月21日
    4
  • redis+springboot_全集成厨房

    redis+springboot_全集成厨房一、Redis集成简介Redis是我们Java开发中,使用频次非常高的一个nosql数据库,数据以key-value键值对的形式存储在内存中。redis的常用使用场景,可以做缓存,分布式锁,自增序列等,使用redis的方式和我们使用数据库的方式差不多,首先我们要在自己的本机电脑或者服务器上安装一个redis的服务器,通过我们的java客户端在程序中进行集成,然后通过客户端完成对redis的增删改查操作。redis的Java客户端类型还是很多的,常见的有jedis,redission,lettuce等,

    2026年2月15日
    4
  • sklearn库的安装教程

    sklearn库的安装教程sklearn 库的简介 sklearn 库 sklearn 是 scikit learn 的简称 是一个基于 Python 的第三方模块 sklearn 库集成了一些常用的机器学习方法 在进行机器学习任务时 并不需要实现算法 只需要简单的调用 sklearn 库中提供的模块就能完成大多数的机器学习任务 sklearn 库是在 Numpy Scipy 和 matplotlib 的基础上开发而成的 因此在介绍 sklea

    2026年3月19日
    2
  • 接口测试简介以及接口测试用例设计思路

    接口测试简介以及接口测试用例设计思路接口测试简介1.什么是接口接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能进行传输的,我们还的对这个接口怎么进行传输进行进行一些设置和定义。开发所谓的接口是模块模块之间的一种连接,而测试眼中的接口是一种协议(对接口的功能的一种定义)2.接口的种类和分类外部接…

    2022年6月28日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号