鱼C论坛

 找回密码
 立即注册
查看: 3270|回复: 3

第十课课后作业疑惑

[复制链接]
发表于 2021-3-9 00:32:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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  ???  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-9 00:33:42 | 显示全部楼层
这是小甲鱼WINDOWS编程SDK  第十课的课后作业,大神指点下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-9 00:34:15 | 显示全部楼层
iMaxWidth = cxChar * 12 * k;   这句中为啥必须是 12  ???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-22 11:28:45 From FishC Mobile | 显示全部楼层
不是必须,超过8就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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