更新:
发现错误
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
rend.DrawLine();
}
效果:
仍是黑色背景
原文
现象如图
我的代码(其他代码都是vs新建项目自带的,只把menu、快捷键删掉了)
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();
}
完全按照microsoft这个教程写的
https://docs.microsoft.com/zh-cn/windows/win32/direct2d/getting-started-with-direct2d
我想要达到的结果
白色背景,一条蓝色的线