我们的目标是,只写一二十行代码,用 Windows自带的原生接口,强行在桌面上打个大红❌,如图:
写了大半年C++,天天和“黑乎乎” 的小窗口你侬我侬?赶紧来打开一扇“Windows”,从窗口跳进全新的GUI世界吧。
0. 视频
用C++在Windows桌面上打个叉❌
1. 使用的 Windows API
1.1 GetSystemMetrics
说明:查询(检索)指定的 Windows (下同)系统的配置或度量。
在本例中,我们使用的 入参 nIndex 有两个:
- SM_CXFULLSCREEN : 取主桌面的屏幕宽度;
- SM_CYFULLSCREEN :取主桌面的屏幕高度。
注意:
- 如果有多个显示器,仅取主桌面;
- 经实测,宽度或高度不会包含任务栏。即:如任务栏布置为横向(常见:底部),则取桌面高度时,不含任务栏高度,如果任务栏布置为竖向,则取桌面宽度时,不含任务的宽度。
本课使用:
DesktopWidth = ::GetSystemMetrics(SM_CXFULLSCREEN);
DesktopHeight = ::GetSystemMetrics(SM_CYFULLSCREEN);
1.2 SetTimer
说明:设置一个定时器。
入参:
- hwnd:指定 定时器要绑定的窗口的句柄;该窗口可接收定时消息,也可指定为 nullptr,则定时器改为调用 lpTimerFunc: 指定的回调函数。
- nIDEvewnt:指定定时器事件编号;
- uElapse:指定定时间隔时长,单位为毫秒;
- lpTimerFunc :定时到点时,调用的函数;
本课使用:
::SetTimer(hwndDlg, ID_TIMER, 80 /*毫秒*/, OnTimer);
1.3 KillTimer
说明:通过指定窗口句柄和定时器事件编号,结束之前设置的定时器。
本课使用:
::KillTimer(hwndDlg, ID_TIMER);
1.3 GetDC
说明: 获取入参 hWnd 指定的窗口绘图用的设备上下文(Device Context);如 hWnd 为 nullptr,则返回整个屏幕的设备上下文。
注意: 使用完后,需调用 ReleaseDC() 归还。
本课使用:
auto hDC = ::GetDC(nullptr); // 得到主桌面的 DC (“画板”)
1.4 CreatePen
原型:
HPEN CreatePen(
int iStyle, // 画线风格
int cWidth, // 画线宽度
COLORREF color // 画线条颜色
);
说明:创建指定风格、宽度、颜色的笔资源。
参数:
- iStyle :支持: PS_SOLID(实线)、PS_DASH(虚线)、PS_DOT(点线)等风格;
- cWidth :宽度,单位为 象素;
- colro : 颜色,可使用宏 RGB(r, g, b) 组合 red、green、blue 三颜色的分量来创建不同颜色。
注意:
笔使用结束后,需及时调用 DeleteObject() 以释放所占用的资源。
本课使用:
//创建实线、宽10,红色的笔:
auto pen = ::CreatePen(PS_SOLID, 10, RGB(0xff, 0, 0));
1.5 更多 API
本课用到的全部 API 的详细说明,完整代码、完整项目文件下载,见 :
在Windows桌面上打个叉