Thomason 发表于 2021-3-9 00:32:59

第十课课后作业疑惑

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      HDC hdc;
      PAINTSTRUCT ps;
      TCHAR szBuffer;
      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???

Thomason 发表于 2021-3-9 00:33:42

这是小甲鱼WINDOWS编程SDK第十课的课后作业,大神指点下

Thomason 发表于 2021-3-9 00:34:15

iMaxWidth = cxChar * 12 * k;   这句中为啥必须是 12???

猫和狼 发表于 2021-3-22 11:28:45

不是必须,超过8就可以
页: [1]
查看完整版本: 第十课课后作业疑惑