我希望能够找到一种合适的方式,以便在创建的窗口中输出字符字符串并将其显示出来。 我之前一直在使用textout()函数,但是由于它只绘制窗口,一旦窗口最小化并恢复,窗口上显示的数据就会消失。 当要显示的数据超过窗口大小时,只有与窗口大小相等的数据被显示,其他数据则被截断。 还有其他的方式可以在窗口上输出数据吗?
您可以在窗口中放置一个静态
或者一个编辑框
(标签和文本框)来展示数据。
在WM_CREATE
期间调用其中之一:
HWND hWndExample = CreateWindow("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);
或者
HWND hWndExample = CreateWindow("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);
如果您使用 Edit
,则用户还可以滚动、复制和粘贴文本。
在这两种情况下,都可以使用 SetWindowText()
更新文本:
SetWindowText(hWndExample, TEXT("Control string"));
(Daboyzuk提供)如果在WM_PAINT中完成,TextOut应该完美地工作。这样可以在缩小和重新调整大小时每次绘制。
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, TEXT("Text Out String"),strlen("Text Out String"));
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, hdc);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT rec;
// SetRect(rect, x ,y ,width, height)
SetRect(&rec,10,10,100,100);
// DrawText(HDC, text, text length, drawing area, parameters "DT_XXX")
DrawText(hdc, TEXT("Text Out String"),strlen("Text Out String"), &rec, DT_TOP|DT_LEFT);
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, hdc);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
这将在给定的矩形中绘制文本。
Draw Text会在给定的矩形内自动换行。
如果您希望将整个窗口作为绘制区域,可以使用GetClientRect(hWnd, &rec);
而不是SetRect(&rec,10,10,100,100);
HWND StaticExample = CreateWindowEx("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100,hWnd,NULL,hInstance,NULL);
;对于编辑框,使用HWND EditExample = CreateWindowEx("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100,hWnd,NULL,hInstance,NULL);
。请注意,这些代码用于创建窗口控件。 - DaboyzukWM_CREATE
中创建窗口,然后只需调用SetWindowText()
来设置内容。这就是为什么我在回复中分开了这些行,但我会让它更清晰一些。 - Deanna