【发布时间】:2010-05-09 11:14:49
【问题描述】:
在 WM_PAINT 上,我执行以下操作:
//RectF mNameRect;
//WCHAR* mName;
//HWND mWin; // this is the window handle
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(mWin, &ps);
Graphics g(hdc);
g.Clear(Color::White);
StringFormat stringForm;
stringForm.SetLineAlignment(StringAlignmentCenter);
stringForm.SetAlignment(StringAlignmentCenter);
// set the rectangle to the size of the whole window
mNameRect.Width = static_cast<float>(size.cx);
mNameRect.Height = static_cast<float>(size.cy);
g.DrawString(mName, -1, &mNameFont, mNameRect, &stringForm, &mNameBrush);
EndPaint(mWin, &ps);
}
在 XP 中这工作正常,mName 显示在窗口中间。但是在 Vista 上,文本不会移动,无论我如何调整窗口大小,它都会保持在原来的位置。 g.Clear(Color::White) 似乎没有任何区别。当窗口隐藏在另一个窗口后面并且需要重新绘制焦点时,文本甚至不会改变位置。
如何让mName在Vista中改变位置?
编辑: 绘制代码通过 WM_PAINT 和 WM_SIZE 以下列方式调用:
// WndProc function
switch (msg){
case WM_SIZE:
// intentionally call paint when WM_SIZE is triggered
case WM_PAINT:
paint();
break;
【问题讨论】:
-
您是否检查过
size在 Vista 上的更改值? -
@Thomas:我添加了调用paint的代码。大小是在paint() 开始时通过GetWindowRect() 收集的。所以是的 - 大小确实改变了.. :/
标签: c++ winapi windows-vista gdi+