发现错误
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
rend.DrawLine();
}
效果:
Renderer.h
#pragma once
#include <d2d1.h>
#pragma comment(lib, "d2d1.lib")
class Renderer {
private:
ID2D1Factory *fac;
ID2D1HwndRenderTarget *rt;
ID2D1SolidColorBrush *bru;
RECT rc;
public:
Renderer(HWND hwnd) {
D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
&fac
);
GetClientRect(hwnd, &rc);
fac->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hwnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top
)
),
&rt
);
rt->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::Blue),
&bru
);
}
void DrawLine() {
rt->BeginDraw();
rt->DrawLine(
D2D1::Point2F(20, 20),
D2D1::Point2F(200, 200),
bru
);
rt->EndDraw();
}
};
主循环的修改内容
Renderer rend(hWnd);
MSG msg;
PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
// 主消息循环:
while (msg.message != WM_QUIT)
{
PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
rend.DrawLine();
}
https://docs.microsoft.com/zh-cn/windows/win32/direct2d/getting-started-with-direct2d
白色背景,一条蓝色的线