当前位置: 首页 > article >正文

windows 边框函数 画笔

windows 边框函数 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;
	static int cxClient, cyClient;
	static	POINT apt[4];

	int i;

	switch (message)
	{
	case WM_SIZE:
		cxClient = LOWORD(lParam);
		cyClient = HIWORD(lParam);

		return 0;

	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		Rectangle(hdc, cxClient / 8, cyClient / 8, 7 * cxClient / 8, 7 * cyClient / 8);

		MoveToEx(hdc, 0, 0, NULL);//修改起始位置
		LineTo(hdc, cxClient, cyClient);
		MoveToEx(hdc, 0, cyClient, NULL);
		LineTo(hdc, cxClient, 0);

		Ellipse(hdc, cxClient / 8, cyClient / 8, 7 * cxClient / 8, 7 * cyClient / 8);

		RoundRect(hdc, cxClient / 4, cyClient / 4, 3 * cxClient / 4, 3 * cyClient / 4, cxClient / 4, cyClient / 4);



		
		/*Rectangle(hdc, 100, 100, 300, 200);
		Rectangle(hdc, 150, 50, 250, 200);

		Ellipse(hdc, 350, 100, 500, 200);
		Ellipse(hdc, 550, 100, 700, 250);

		RoundRect(hdc, 750, 100, 900, 250,30,40);

		Arc(hdc,100, 300, 500, 500, 300, 300, 50, 500);

		Chord(hdc, 100, 300, 500, 500, 300, 300, 50, 500);

		Pie(hdc, 100, 300, 500, 500, 300, 300, 50, 500);*/



	
		EndPaint(hwnd, &ps);
		return 0;

			return 0;
	case WM_DESTROY:

		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}
画笔 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;
	HPEN hPen, hOldPen;

	switch (message)
	{

	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		GetClientRect(hwnd, &rect);
		//hPen = (HPEN)GetStockObject(BLACK_PEN);
		hPen = CreatePen(BS_SOLID, 100, RGB(255, 0, 0));
		hOldPen = (HPEN)SelectObject(hdc, hPen);
//把画笔选入工作区,返回被替换的旧画笔
		MoveToEx(hdc, rect.left, (rect.bottom - rect.top) / 2, NULL);
		LineTo(hdc, rect.right, (rect.bottom - rect.top) / 2);
		SelectObject(hdc, hOldPen);
//把旧画笔送回环境中


	
		EndPaint(hwnd, &ps);
		return 0;

			return 0;
	case WM_DESTROY:

		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

在代码中 

//hPen = (HPEN)GetStockObject(BLACK_PEN);
        hPen = CreatePen(BS_SOLID, 100, RGB(255, 0, 0));
        hOldPen = (HPEN)SelectObject(hdc, hPen);

GetStockObject 和SelectObject 默认生成HGDIOBJ 类型的队形句柄,如果去掉会报错

错误“C2440: ‘=’: 无法从‘HGDIOBJ’转换为‘HPEN’”

通常发生在尝试将HGDIOBJ类型的值直接赋值给HPEN类型的变量时。HGDIOBJ是一个通用的GDI对象句柄类型,而HPEN是专门用于表示画笔对象的句柄类型。虽然HPEN本质上也是HGDIOBJ,但直接赋值会导致类型不匹配的编译错误。

解决方法

要解决这个问题,可以通过显式类型转换将HGDIOBJ转换为HPEN。以下是两种常见的解决方法:

方法一:使用强制类型转换

HGDIOBJ hGdiObj = SelectObject(hdc, hPen);
HPEN hPenSelected = (HPEN)hGdiObj;

通过强制类型转换,将HGDIOBJ转换为HPEN

方法二:直接使用SelectObject的返回值

如果SelectObject的返回值是HGDIOBJ类型,但你知道它实际上是一个HPEN,可以直接将其强制转换为HPEN

HPEN hPenSelected = (HPEN)SelectObject(hdc, hPen);
 背景色和混合模式
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;
	static HPEN hPen, hOldPen;

	switch (message)
	{

	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		GetClientRect(hwnd, &rect);
		hPen = CreatePen(PS_DOT, 1, RGB(255,255,255));
		hOldPen = (HPEN)SelectObject(hdc, hPen);
		SetBkColor(hdc, RGB(0, 255, 0)); //用于填充 画笔 画刷的背景色
		SetBkMode(hdc, TRANSPARENT);
		SetROP2(hdc, R2_NOT);//混合模式
		MoveToEx(hdc, rect.left, (rect.bottom - rect.top) / 2, NULL);
		LineTo(hdc, rect.right, (rect.bottom - rect.top) / 2);
		SelectObject(hdc, hOldPen);

		EndPaint(hwnd, &ps);
		return 0;

			return 0;
	case WM_DESTROY:
		DeleteObject(hPen);
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}


http://www.kler.cn/a/540223.html

相关文章:

  • Log4j定制JSON格式日志输出
  • 从零到一:我的元宵灯谜小程序诞生记
  • Centos挂载镜像制作本地yum源,并补装图形界面
  • 通讯录管理小程序
  • leetcode 做题思路快查
  • 【vscode+latex】实现overleaf本地高效编译
  • MIT6.824 Lecture 2-RPC and Threads Lecture 3-GFS
  • Post-trained猜想
  • 长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾
  • 安装 Ollama 需要哪些步骤?(windows+mac+linux+二进制+Docker)
  • 云原生(五十四) | RDS数据导入与导出
  • Jenkins设置防火墙规则允许访问本机IP端口
  • 面试高频题拆解
  • 如果一个服务器突然间变的很卡,该如何排查?
  • 局域网内别的电脑怎么连接到对方的mysql数据库
  • 前后端分离的网页游戏,后端spring boot,前端vite+vue
  • 深度学习 OpenAI的DALL-E等模型可以根据用户输入的文字描述生成图像
  • NO.10十六届蓝桥杯备战|cout格式控制|习题(C++)
  • web第二次作业
  • FNN —— 基于因子分解机的神经网络
  • 三、OSG学习笔记-应用基础
  • 26~31.ppt
  • Linux性能优化实战,网络丢包问题分析
  • JAVA:CloseableHttpClient 进行 HTTP 请求的技术指南
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_log_stderr 函数
  • SOME/IP--协议英文原文讲解5