在小甲鱼老师源代码中这个应怎样理解?
如题:第010讲:不要试图猜测文本的尺寸 | 课后测试题及答案 中:请问用红色字部分应该怎么理解?[*]#define N 10
[*]……
[*]LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
[*]{
[*] HDC hdc;
[*] PAINTSTRUCT ps;
[*] TCHAR szBuffer;
[*] 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”并不能让字符显示在垂直居中的位置,后边的代码是为了做到垂直居中而做的妥协:再减去半个字符的高度... 我没有看过小甲鱼的windows,不过这块应该是求文本输出时的y坐标了吧。 流行语 发表于 2014-10-16 01:07
我没有看过小甲鱼的windows,不过这块应该是求文本输出时的y坐标了吧。
的确是Y坐标,但你回答得太抽像了。 小甲鱼 发表于 2014-10-16 17:21
因为单独“(rect.bottom - rect.top) / 2”并不能让字符显示在垂直居中的位置,后边的代码是为了做到垂直居 ...
说得是呢!我调试了几次程序。已经理解了,只是在Windows中调试程序不能像控制台程序一样一步一步的来。理解起来就要困难一些。不过总算还是理解了!再次感谢鱼哥的解答! 小甲鱼大神出现了。 好像好厉害的样子~ 。。。。 {:7_146:} 我是来领鱼币的
页:
[1]