鱼C论坛

 找回密码
 立即注册
查看: 3947|回复: 11

在小甲鱼老师源代码中这个应怎样理解?

[复制链接]
发表于 2014-10-15 17:26:10 | 显示全部楼层 |阅读模式
10鱼币
如题:  第010讲:不要试图猜测文本的尺寸 | 课后测试题及答案:请问用红色字部分应该怎么理解?
  • #define N 10
  • ……
  • LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  • {
  •         HDC hdc;
  •         PAINTSTRUCT ps;
  •         TCHAR szBuffer[128];
  •         int i, j;
  •         size_t iTarget;
  •         TEXTMETRIC tm;
  •         RECT rect;
  •         static int cxChar, cyChar;
  •         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);
  •                 for (i = 1; i <= N; i++)
  •                 {
  •                         StringCchPrintf(szBuffer, 128, TEXT(""));
  •                         for (j = 0; j < 2 * i - 1; j++)
  •                         {
  •                                 StringCchCat(szBuffer, 128, TEXT("x"));
  •                         }
  •                         StringCchLength(szBuffer, 128, &iTarget);
  •                         GetClientRect(hwnd, &rect);
  •                         SetTextAlign(hdc, GetTextAlign(hdc) | TA_CENTER);
  •                         TextOut(hdc, (rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2 - (N/2 - i +1) * cyChar, szBuffer, iTarget);//红色字体这段不知道该如何理解,麻烦知道的请讲解一下。
  •                 }
  •                 EndPaint(hwnd, &ps);
  •                 return 0;
  •         case WM_DESTROY:
  •                 PostQuitMessage(0);
  •                 return 0;
  •         }
  •         return DefWindowProc(hwnd, message, wParam, lParam);
  • }

最佳答案

查看完整内容

因为单独“(rect.bottom - rect.top) / 2”并不能让字符显示在垂直居中的位置,后边的代码是为了做到垂直居中而做的妥协:再减去半个字符的高度...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-15 17:26:11 | 显示全部楼层
因为单独“(rect.bottom - rect.top) / 2”并不能让字符显示在垂直居中的位置,后边的代码是为了做到垂直居中而做的妥协:再减去半个字符的高度...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 01:07:24 | 显示全部楼层
我没有看过小甲鱼的windows,不过这块应该是求文本输出时的y坐标了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 15:58:41 | 显示全部楼层
流行语 发表于 2014-10-16 01:07
我没有看过小甲鱼的windows,不过这块应该是求文本输出时的y坐标了吧。

的确是Y坐标,但你回答得太抽像了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-16 18:38:24 | 显示全部楼层
小甲鱼 发表于 2014-10-16 17:21
因为单独“(rect.bottom - rect.top) / 2”并不能让字符显示在垂直居中的位置,后边的代码是为了做到垂直居 ...

说得是呢!我调试了几次程序。已经理解了,只是在Windows中调试程序不能像控制台程序一样一步一步的来。理解起来就要困难一些。不过总算还是理解了!再次感谢鱼哥的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 18:53:13 | 显示全部楼层
小甲鱼大神出现了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-10-30 14:51:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-2 04:32:52 | 显示全部楼层
好像好厉害的样子~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-2-5 11:35:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-8 11:46:18 | 显示全部楼层
。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-8 15:36:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-23 21:33:04 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 15:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表