gpt4 book ai didi

c++ - WINAPI BeginPaint 和 TextOut 在自定义函数中多次调用

转载 作者:行者123 更新时间:2023-11-30 02:04:08 26 4
gpt4 key购买 nike

我在我的 printText 函数中遇到了另一堵墙,现在已经搜索了一段时间但没有找到解决方案。

基本上,在 WM_PAINT 消息中调用 printText 函数以将文本绘制到 win32 窗口。它工作正常,但仅适用于一次调用。如果我尝试使用不同的参数第二次调用该函数,似乎什么也没有发生。

我确定我又完全忽略了一些东西,但我看不出它可能是什么。

函数如下:

void controls::printText(unsigned char R, unsigned char G, unsigned char B, int x, int y, LPCSTR text, HWND parent, PAINTSTRUCT pss, HDC hdc)
{

hdc = BeginPaint(parent, &pss);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(R,G,B));
TextOut(hdc, x, y, text, strlen(text));
EndPaint(parent, &pss);

}

它位于“控件”类中,调用如下:

HDC hdc, hdc2;
PAINTSTRUCT ps, ps2;

ctrls->printText(255,0,0,30,50,"Test text",hWnd,ps,hdc);
ctrls->printText(255,0,0,30,80,"test text 2",hWnd,ps2,hdc2);

有两 (2) 个 HDC 和 PAINTSTRUCT 声明,因为我一直在尝试寻找解决方案的代码;我尝试从函数中删除 paintstruct 和 hdc 参数,并将它们在函数内部声明为局部变量(这对我来说意义不大),但没有成功。

基本上,第一行,

ctrls->printText(255,0,0,30,50,"Test text",hWnd,ps,hdc);

将按原样打印“测试文本”,红色,从 (30,50) 开始,但第二行不打印任何内容。但是,如果我删除第一行,第二行也可以正常工作。

请注意:我在描述时可能在这里使用了 paint 和 print 同义词。

我想我已经在此处包含了所有相关内容,但如果需要任何其他代码,请告诉我,我会在看到消息后立即发布 :)

再次提前感谢大家,非常感谢您的宝贵时间和答复。

最佳答案

文档写的很清楚

An application should not call BeginPaint except in response to a WM_PAINT message.

所以你应该为每个 WM_PAINT 调用一次,不能再调用了。

关于c++ - WINAPI BeginPaint 和 TextOut 在自定义函数中多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com