【发布时间】:2011-02-12 08:10:10
【问题描述】:
我最近一直在玩 C 和 win32,以下让我犹豫不决:
case WM_PAINT:
g_crntRect = (RECT*) malloc(sizeof(RECT));
GetWindowRect(hwnd, g_crntRect);
hpen = CreatePen(PS_SOLID, 1, RGB(255,25,5));
hdc = BeginPaint (hwnd, &ps) ;
oldPen = SelectObject(hdc, hpen);
drawRects(hwnd, hdc);
//Rectangle(hdc, 0, 0, 840, 525);
SelectObject(hdc,oldPen);
DeleteObject(hpen);
EndPaint (hwnd, &ps) ;
return 0 ;
因此,如果我在上面调用我自己的方法来绘制矩形,它不会绘制任何内容,但是在我上面评论的 WM_PAINT 中绘制矩形的调用成功而没有问题。
这是我的方法:
BOOL drawRects(HWND hwnd, HDC hdc)
{
char buffer[50];
BOOL res = FALSE;
RECT tempRect = {0};
char quadStr[6] = "";
int i = 0;
quadStr[i]='*';
OutputDebugString("Going to draw");
for (i = 1; i <= 4; i++)
{
//get rect for each quadrent from the parent
OutputDebugString("inside for");
getRect(g_crntRect, &tempRect, i);
OutputDebugString("got rectr");;
res = Rectangle(hdc, tempRect.right, tempRect.top, tempRect.right, tempRect.bottom);
if (res == FALSE)
{
OutputDebugString("false");;
sprintf(buffer, "Error: %ld", GetLastError());
OutputDebugString(buffer);
}
else
{
OutputDebugString("drew");;
}
quadStr[i]='*';
printRect(quadStr, &tempRect);
}
return TRUE;
}
查看调试输出,一切似乎都很好。正确的值被传递到 Rectangle 方法中。但是,我想知道我是否没有正确通过 HDC?
有什么想法吗?
【问题讨论】:
-
当您在 wm_paint 处理程序之外调用 drawRects 时,您不会显示 HDC 的来源。
-
目前还不清楚为什么没有定义 STRICT。一定要尝试使用项目模板来开始一个项目,你不应该处理编译器没有捕捉到这些编程错误。
-
@Larry 我不在 wm_paint 之外调用 drawRects,而是在内部调用它。
-
@pug,对不起,我误解了这个问题,我以为你是在绘图处理程序之外调用 drawRects。
-
下一个问题:从drawRects内部调用Rectangle的结果是什么?