gpt4 book ai didi

c++ - 一定数量的像素后 SetPixel 崩溃

转载 作者:行者123 更新时间:2023-11-28 02:31:23 25 4
gpt4 key购买 nike

我是 MFC/C++ 的新手,我试图用像素填充我的窗口。我发现有一个函数叫做:

SetPixel(X,Y,RGB(,,));

在我尝试在我的循环中使用它之后,我发现这个函数在一定数量的像素后停止。所以它没有给我真正想要达到的结果。这是我的代码:

void PIXELPROG::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);


int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;



dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}


CStatic * XText = (CStatic *)GetDlgItem(IDC_X);
CStatic * YText = (CStatic *)GetDlgItem(IDC_YWERT);

CString XYWert;

for (int x=0,y=0;;)
{
GetDC()->SetPixelV(x, y, RGB(y,x,y));
XYWert.Format(L"%d",y);

XText->SetWindowTextW(XYWert);

++x;
if (x == 500)
{
++y;
x = 0;
}
if (y == 100)
{
break;
}
}
}

我也没有收到任何错误。它只是停止了。我也尝试过

SetPixelV()

但都没有帮助。有人有想法吗?

最佳答案

来自 CWnd::GetDC 的文档:

Unless the device context belongs to a window class, the ReleaseDC member function must be called to release the context after painting.

因为您没有将 GetDC 的返回值分配给任何东西,所以您无法调用 ReleaseDC。由于它们未发布,因此它们会累积 - 您的应用程序可以使用的 GDI 对象总数是有限制的,请参阅 GDI Objects .一旦达到该限制,事情就会很快变坏(别问我怎么知道的)。

如果这是对 WM_PAINT 消息的响应,您不应该首先调用 GetDC。您应该使用您创建的 CPaintDC 对象。作为一般规则,不要在您自己的 OnPaint 处理程序中调用父级 OnPaint 方法,因为您只能生成一个 CPaintDC

关于c++ - 一定数量的像素后 SetPixel 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884321/

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