|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR szBuffer[128];
TEXTMETRIC tm;
RECT rect;
static int cxChar, cyChar, iMaxWidth;
int i, j, k, iExHeight = 1;
switch (message)
{
case WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hwnd, hdc);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect); // 乳此获取客户区尺寸效率并不高,在接下来的滚动条课程中我们将介绍高效的方法
TextOut(hdc, 2 * cxChar, cyChar, TEXT("九九乘法表:"), 6);
for (i = 1; i < 10; i++)
{
for (j = 1, k = 1; j <= i; j++, k++)
{
// k 用于记录打印的横向位置
wsprintf(szBuffer, TEXT("%d * %d = %d"), i, j, i*j);
iMaxWidth = cxChar * 12 * k; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (iMaxWidth > (rect.right - rect.left))
{
iExHeight++; // 如果当前客户区宽度不足以容纳所有内容,则换行(额外添加一行)显示
k = 1; // 如果添加一行,说明要从行首开始打印
}
TextOut(hdc, 2 * cxChar + (k - 1) * cxChar * 12, cyChar + (i + iExHeight) * cyChar, szBuffer, lstrlen(szBuffer));
}
}
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
iMaxWidth = cxChar * 12 * k; 这句中为啥必须是 12 ???
|
|