小程序:VC++修改Windows桌面背景为黑白灰色(WinXP、Win7 64位)

本文详细介绍了如何利用DirectX技术直接在屏幕上绘制并优化显示效果,包括初始化DirectX环境、创建设备上下文、创建位图、位图选择、位图位复制以及性能计时等关键步骤。通过实现屏幕像素的快速更新与颜色调整,显著提升视觉体验与响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上程序:

void CTestDlg::DoIt() 
{
	// TODO: Add your control notification handler code here

	LARGE_INTEGER litmp;  
	LONGLONG qt1,qt2;  
	double dft,dff,dfm;  
	
	//获得时钟频率  
	QueryPerformanceFrequency(&litmp);//获得时钟频率  
	dff=(double)litmp.QuadPart;  
	
	//获得初始值  
	QueryPerformanceCounter(&litmp);  
	qt1=litmp.QuadPart;  


	HDC   hScrDC, hScreen;
	HBITMAP   hBitmap;
	hScreen = ::CreateDC("DISPLAY", NULL, NULL, NULL);
	hScrDC   =::CreateCompatibleDC(hScreen); 

	int w = GetDeviceCaps(hScreen, HORZRES);
	int h = GetDeviceCaps(hScreen, VERTRES);

	
	hBitmap = CreateCompatibleBitmap(hScreen, w,h); 
	
	if (hBitmap == 0) 
	{
		AfxMessageBox("hbmScreen"); 
	}
	
	if (!SelectObject(hScrDC, hBitmap)) 
	{
		AfxMessageBox("Compatible Bitmap Selection"); 
	}

	if (!BitBlt(hScrDC,0,0, w, h, hScreen, 0,0, SRCCOPY)) 
	{
		AfxMessageBox("BitBlt"); 
	}

	COLORREF rgb = 0;

	for (int i=0; i<w; i++)
	{
		for (int j=0; j<h; j++)
		{
			rgb = ::GetPixel(hScrDC, i, j);
			//int r = GetBValue(rgb);
            int g = GetGValue(rgb);
            //int b = GetRValue(rgb);
			rgb = RGB(g, g, g);
			::SetPixel(hScrDC, i, j, rgb);
		}
	}


	if (!BitBlt(hScreen,0,0, w, h, hScrDC, 0,0, SRCCOPY)) 
	{
		AfxMessageBox("BitBlt"); 
	}


	//获得终止值  
	QueryPerformanceCounter(&litmp);  
	qt2=litmp.QuadPart; 
	
	//获得对应的时间值,转到毫秒单位上  
	dfm=(double)(qt2-qt1);  
	dft=dfm/dff;  
	CString str;
	str.Format("修改完成,耗时: %.3f秒", dft);
	SetWindowText(str);


	
	DeleteObject(hBitmap);
	DeleteDC(hScrDC);
	DeleteDC(hScreen);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值