- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!