VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1724|回复: 4

[求助] windows程序设计(第五版)当中水平滚动条的问题

[复制链接]
01_avatar_middle
在线会员 发表于 2015-10-15 21:40:22 | 显示全部楼层 |阅读模式
3驿站币
这段是书上的,用纯win32 API写出来的程序,但是我发现一个问题,数值滚动条正常工作,水平滚动条却不能正常工作,请教各位大虾应该如何修复呢?
  1. SysMets.h头文件包含的内容:

  2. /*-----------------------------------------------

  3.    SYSMETS.H -- System metrics display structure

  4.   -----------------------------------------------*/

  5. #define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics [0]))



  6. struct

  7. {

  8.      int     iIndex ;

  9.      TCHAR * szLabel ;

  10.      TCHAR * szDesc ;

  11. }

  12. sysmetrics [] =

  13. {

  14.      SM_CXSCREEN,             TEXT ("SM_CXSCREEN"),            

  15.                               TEXT ("Screen width in pixels"),

  16.      SM_CYSCREEN,             TEXT ("SM_CYSCREEN"),            

  17.                               TEXT ("Screen height in pixels"),

  18.      SM_CXVSCROLL,            TEXT ("SM_CXVSCROLL"),            

  19.                               TEXT ("Vertical scroll width"),

  20.      SM_CYHSCROLL,            TEXT ("SM_CYHSCROLL"),            

  21.                               TEXT ("Horizontal scroll height"),

  22.      SM_CYCAPTION,            TEXT ("SM_CYCAPTION"),            

  23.                               TEXT ("Caption bar height"),

  24.      SM_CXBORDER,             TEXT ("SM_CXBORDER"),            

  25.                               TEXT ("Window border width"),

  26.      SM_CYBORDER,             TEXT ("SM_CYBORDER"),            

  27.                               TEXT ("Window border height"),

  28.      SM_CXFIXEDFRAME,         TEXT ("SM_CXFIXEDFRAME"),         

  29.                               TEXT ("Dialog window frame width"),

  30.      SM_CYFIXEDFRAME,         TEXT ("SM_CYFIXEDFRAME"),         

  31.                               TEXT ("Dialog window frame height"),

  32.      SM_CYVTHUMB,             TEXT ("SM_CYVTHUMB"),            

  33.                               TEXT ("Vertical scroll thumb height"),

  34.      SM_CXHTHUMB,             TEXT ("SM_CXHTHUMB"),            

  35.                               TEXT ("Horizontal scroll thumb width"),

  36.      SM_CXICON,               TEXT ("SM_CXICON"),               

  37.                               TEXT ("Icon width"),

  38.      SM_CYICON,               TEXT ("SM_CYICON"),               

  39.                               TEXT ("Icon height"),

  40.      SM_CXCURSOR,             TEXT ("SM_CXCURSOR"),            

  41.                               TEXT ("Cursor width"),

  42.      SM_CYCURSOR,             TEXT ("SM_CYCURSOR"),            

  43.                               TEXT ("Cursor height"),

  44.      SM_CYMENU,               TEXT ("SM_CYMENU"),               

  45.                               TEXT ("Menu bar height"),

  46.      SM_CXFULLSCREEN,         TEXT ("SM_CXFULLSCREEN"),         

  47.                               TEXT ("Full screen client area width"),

  48.      SM_CYFULLSCREEN,         TEXT ("SM_CYFULLSCREEN"),         

  49.                               TEXT ("Full screen client area height"),

  50.      SM_CYKANJIWINDOW,        TEXT ("SM_CYKANJIWINDOW"),        

  51.                               TEXT ("Kanji window height"),

  52.      SM_MOUSEPRESENT,         TEXT ("SM_MOUSEPRESENT"),         

  53.                               TEXT ("Mouse present flag"),

  54.      SM_CYVSCROLL,            TEXT ("SM_CYVSCROLL"),            

  55.                               TEXT ("Vertical scroll arrow height"),

  56.      SM_CXHSCROLL,            TEXT ("SM_CXHSCROLL"),            

  57.                               TEXT ("Horizontal scroll arrow width"),

  58.      SM_DEBUG,                TEXT ("SM_DEBUG"),               

  59.                               TEXT ("Debug version flag"),

  60.      SM_SWAPBUTTON,           TEXT ("SM_SWAPBUTTON"),           

  61.                               TEXT ("Mouse buttons swapped flag"),

  62.      SM_CXMIN,                TEXT ("SM_CXMIN"),               

  63.                               TEXT ("Minimum window width"),

  64.      SM_CYMIN,                TEXT ("SM_CYMIN"),               

  65.                               TEXT ("Minimum window height"),

  66.      SM_CXSIZE,               TEXT ("SM_CXSIZE"),               

  67.                               TEXT ("Min/Max/Close button width"),

  68.      SM_CYSIZE,               TEXT ("SM_CYSIZE"),               

  69.                               TEXT ("Min/Max/Close button height"),

  70.      SM_CXSIZEFRAME,          TEXT ("SM_CXSIZEFRAME"),         

  71.                               TEXT ("Window sizing frame width"),

  72.      SM_CYSIZEFRAME,          TEXT ("SM_CYSIZEFRAME"),         

  73.                               TEXT ("Window sizing frame height"),

  74.      SM_CXMINTRACK,           TEXT ("SM_CXMINTRACK"),           

  75.                               TEXT ("Minimum window tracking width"),

  76.      SM_CYMINTRACK,           TEXT ("SM_CYMINTRACK"),           

  77.                               TEXT ("Minimum window tracking height"),

  78.      SM_CXDOUBLECLK,          TEXT ("SM_CXDOUBLECLK"),         

  79.                               TEXT ("Double click x tolerance"),

  80.      SM_CYDOUBLECLK,          TEXT ("SM_CYDOUBLECLK"),         

  81.                               TEXT ("Double click y tolerance"),

  82.      SM_CXICONSPACING,        TEXT ("SM_CXICONSPACING"),        

  83.                               TEXT ("Horizontal icon spacing"),

  84.      SM_CYICONSPACING,        TEXT ("SM_CYICONSPACING"),        

  85.                               TEXT ("Vertical icon spacing"),

  86.      SM_MENUDROPALIGNMENT,    TEXT ("SM_MENUDROPALIGNMENT"),   

  87.                               TEXT ("Left or right menu drop"),

  88.      SM_PENWINDOWS,           TEXT ("SM_PENWINDOWS"),           

  89.                               TEXT ("Pen extensions installed"),

  90.      SM_DBCSENABLED,          TEXT ("SM_DBCSENABLED"),         

  91.                               TEXT ("Double-Byte Char Set enabled"),

  92.      SM_CMOUSEBUTTONS,        TEXT ("SM_CMOUSEBUTTONS"),        

  93.                               TEXT ("Number of mouse buttons"),

  94.      SM_SECURE,               TEXT ("SM_SECURE"),               

  95.                               TEXT ("Security present flag"),

  96.      SM_CXEDGE,               TEXT ("SM_CXEDGE"),               

  97.                               TEXT ("3-D border width"),

  98.      SM_CYEDGE,               TEXT ("SM_CYEDGE"),               

  99.                               TEXT ("3-D border height"),

  100.      SM_CXMINSPACING,         TEXT ("SM_CXMINSPACING"),         

  101.                               TEXT ("Minimized window spacing width"),

  102.      SM_CYMINSPACING,         TEXT ("SM_CYMINSPACING"),         

  103.                               TEXT ("Minimized window spacing height"),

  104.      SM_CXSMICON,             TEXT ("SM_CXSMICON"),            

  105.                               TEXT ("Small icon width"),

  106.      SM_CYSMICON,             TEXT ("SM_CYSMICON"),            

  107.                               TEXT ("Small icon height"),

  108.      SM_CYSMCAPTION,          TEXT ("SM_CYSMCAPTION"),         

  109.                               TEXT ("Small caption height"),

  110.      SM_CXSMSIZE,             TEXT ("SM_CXSMSIZE"),            

  111.                               TEXT ("Small caption button width"),

  112.      SM_CYSMSIZE,             TEXT ("SM_CYSMSIZE"),            

  113.                               TEXT ("Small caption button height"),

  114.      SM_CXMENUSIZE,           TEXT ("SM_CXMENUSIZE"),           

  115.                               TEXT ("Menu bar button width"),

  116.      SM_CYMENUSIZE,           TEXT ("SM_CYMENUSIZE"),           

  117.                               TEXT ("Menu bar button height"),

  118.      SM_ARRANGE,              TEXT ("SM_ARRANGE"),              

  119.                               TEXT ("How minimized windows arranged"),

  120.      SM_CXMINIMIZED,          TEXT ("SM_CXMINIMIZED"),         

  121.                               TEXT ("Minimized window width"),

  122.      SM_CYMINIMIZED,          TEXT ("SM_CYMINIMIZED"),         

  123.                               TEXT ("Minimized window height"),

  124.      SM_CXMAXTRACK,           TEXT ("SM_CXMAXTRACK"),           

  125.                               TEXT ("Maximum draggable width"),

  126.      SM_CYMAXTRACK,           TEXT ("SM_CYMAXTRACK"),           

  127.                               TEXT ("Maximum draggable height"),

  128.      SM_CXMAXIMIZED,          TEXT ("SM_CXMAXIMIZED"),         

  129.                               TEXT ("Width of maximized window"),

  130.      SM_CYMAXIMIZED,          TEXT ("SM_CYMAXIMIZED"),         

  131.                               TEXT ("Height of maximized window"),

  132.      SM_NETWORK,              TEXT ("SM_NETWORK"),              

  133.                               TEXT ("Network present flag"),

  134.      SM_CLEANBOOT,            TEXT ("SM_CLEANBOOT"),            

  135.                               TEXT ("How system was booted"),

  136.      SM_CXDRAG,               TEXT ("SM_CXDRAG"),               

  137.                               TEXT ("Avoid drag x tolerance"),

  138.      SM_CYDRAG,               TEXT ("SM_CYDRAG"),               

  139.                               TEXT ("Avoid drag y tolerance"),

  140.      SM_SHOWSOUNDS,           TEXT ("SM_SHOWSOUNDS"),           

  141.                               TEXT ("Present sounds visually"),

  142.      SM_CXMENUCHECK,          TEXT ("SM_CXMENUCHECK"),         

  143.                               TEXT ("Menu check-mark width"),

  144.      SM_CYMENUCHECK,          TEXT ("SM_CYMENUCHECK"),         

  145.                               TEXT ("Menu check-mark height"),

  146.      SM_SLOWMACHINE,          TEXT ("SM_SLOWMACHINE"),         

  147.                               TEXT ("Slow processor flag"),

  148.      SM_MIDEASTENABLED,       TEXT ("SM_MIDEASTENABLED"),      

  149.                               TEXT ("Hebrew and Arabic enabled flag"),

  150.      SM_MOUSEWHEELPRESENT,    TEXT ("SM_MOUSEWHEELPRESENT"),   

  151.                               TEXT ("Mouse wheel present flag"),

  152.      SM_XVIRTUALSCREEN,       TEXT ("SM_XVIRTUALSCREEN"),      

  153.                               TEXT ("Virtual screen x origin"),

  154.      SM_YVIRTUALSCREEN,       TEXT ("SM_YVIRTUALSCREEN"),      

  155.                               TEXT ("Virtual screen y origin"),

  156.      SM_CXVIRTUALSCREEN,      TEXT ("SM_CXVIRTUALSCREEN"),      

  157.                               TEXT ("Virtual screen width"),

  158.      SM_CYVIRTUALSCREEN,      TEXT ("SM_CYVIRTUALSCREEN"),      

  159.                               TEXT ("Virtual screen height"),

  160.      SM_CMONITORS,            TEXT ("SM_CMONITORS"),            

  161.                               TEXT ("Number of monitors"),

  162.      SM_SAMEDISPLAYFORMAT,    TEXT ("SM_SAMEDISPLAYFORMAT"),   

  163.                               TEXT ("Same color format flag")

  164. } ;



  165. 源程序:

  166. #include<windows.h>

  167. #include <tchar.h>

  168. #include "SysMets.h"

  169. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);      //窗口回调函数前向声明,HWND表示窗口句柄,UINT表示消息,WPARAM, LPARAM消息参数



  170. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)

  171. {

  172.       static TCHAR szAppName[] = TEXT("HelloWin");     

  173.       HWND hWnd;

  174.       MSG msg;

  175.       WNDCLASS wndClass;



  176.       /*设计窗口类*/

  177.       wndClass.style = CS_HREDRAW | CS_VREDRAW;      //窗口类样式,注意区别后面的窗口样式

  178.       wndClass.lpfnWndProc = WndProc;            //窗口回调函数

  179.       wndClass.cbClsExtra = 0;

  180.       wndClass.cbWndExtra = 0;

  181.       wndClass.hInstance = hInstance;

  182.       wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);      //加载图标

  183.       wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);            //加载鼠标形状

  184.       wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);      //背景画刷,选择默认的白色背景画刷

  185.       wndClass.lpszMenuName = NULL;      //加载菜单,此处不加载菜单

  186.       wndClass.lpszClassName = szAppName;      //窗口类名

  187.      



  188.       /*注册窗口*/

  189.       if (!RegisterClass(&wndClass))            //如果注册失败,则弹出消息框提示

  190.       {

  191.             MessageBox(NULL, TEXT("This Program requires Windows NT!"), szAppName, MB_ICONERROR);

  192.             return 0;

  193.       }



  194.       /*创建窗口*/

  195.       hWnd = CreateWindow(szAppName,            //传入窗口的类名

  196.                                     TEXT("The Hello Program"),      //传入窗口的标题

  197.                                     WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,      //传入窗口样式

  198.                                     CW_USEDEFAULT,      //初始化窗口左上角x的位置,本处采用默认

  199.                                     CW_USEDEFAULT,      //初始化窗口左上角y的位置,本处采用默认

  200.                                     CW_USEDEFAULT,      //初始化窗口高度,本处采用默认

  201.                                     CW_USEDEFAULT,      //初始化窗口的宽度,本处采用默认

  202.                                     NULL,            //父窗口句柄,此处没有父窗口,所以为NULL

  203.                                     NULL,            //菜单句柄,此处无菜单,所以为NULL

  204.                                     hInstance,      //实例句柄

  205.                                     NULL

  206.                                     );



  207.       /*显示窗口*/

  208.       ShowWindow(hWnd, nShowCmd);     

  209.      

  210.       /*更新窗口*/

  211.       UpdateWindow(hWnd);



  212.       /*消息循环*/

  213.       while (GetMessage(&msg,NULL,0,0))

  214.       {

  215.             TranslateMessage(&msg);

  216.             DispatchMessage(&msg);

  217.       }

  218.       return msg.wParam;

  219. }





  220. /*消息循环函数的编写*/

  221. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

  222. {

  223.       /*注意c语言中需要在开始定义变量然后使用,这点与c++的一边定义一边使用不一样!

  224.       y用来记录变化之后的重画初始位置,

  225.       iVerPos用来记录竖直滚动条的位置,

  226.       iHorzPos用来记录水平滚动条的位置,

  227.       */

  228.       int i, x, y, iVerPos, iHorzPos, iPaintBeg, iPaintEnd;

  229.       /*cxChar用来表示字符的平均宽度,

  230.         cxCaps用来表示大写字符的宽度,

  231.         cyChar用来表示字符的高度,

  232.         cxClient用来获取客户区的宽度,

  233.         cyClient用来获取客户区的高度

  234.       */

  235.       static int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth;

  236.       HDC hDc;      //定义设备描述表

  237.       PAINTSTRUCT ps;            //绘制信息结构

  238.       TCHAR szBuffer[10];      //定义一个缓冲区

  239.       TEXTMETRIC tm;      //文本尺寸度量

  240.       SCROLLINFO si;

  241.       switch (message)

  242.       {

  243.       case WM_CREATE:      //窗口创建消息

  244.             hDc = GetDC(hWnd);      //获取窗口的设备描述表,GetDC一定要与ReleaseDC连用释放资源

  245.             GetTextMetrics(hDc,&tm);

  246.             cxChar = tm.tmAveCharWidth;      //获取字符的平均宽度

  247.             cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2)*cxChar / 2;      //通过判断是否为等宽字体,如果是等宽字体,则取平均宽度,如果非等宽字体,大写字母为平均宽度的1.5倍

  248.             cyChar = tm.tmHeight + tm.tmExternalLeading;      //计算字符的高度,注意此处增加了两行之间的空白

  249.             ReleaseDC(hWnd, hDc);      //释放DC

  250.             iMaxWidth = 40 * cxChar + 22 * cxCaps;      //存储三列的宽度

  251.             return 0;

  252.      

  253.       case WM_SIZE:      //窗口尺寸发生变化是发送此消息

  254.             cxClient = LOWORD(lParam);      //消息附加参数lParam的低位字存储了变化后客户区的宽度

  255.             cyClient = HIWORD(lParam);      //消息附加参数lParam的高位字存储了变化后客户区的高度

  256.            

  257.             /*设置竖直滚动条的范围和一页的大小*/

  258.             si.cbSize = sizeof si;

  259.             si.fMask = SIF_RANGE | SIF_PAGE;      //滚动条的掩码,必须写上掩码,否则其他代码失效

  260.             si.nMin = 0;      //设置滚动条的最小值为0

  261.             si.nMax = NUMLINES - 1;            //设置滚动条的最大值为NUMLINES

  262.             si.nPage = cyClient / cyChar;      //设置滚动条一页的大小

  263.             SetScrollInfo(hWnd, SB_VERT, &si, TRUE);



  264.             /*设置水平滚动条的范围和一页的大小*/

  265.             si.cbSize = sizeof si;

  266.             si.fMask = SIF_RANGE | SIF_PAGE;      //滚动条的掩码

  267.             si.nMin = 0;      //设置滚动条的最小值为0

  268.             si.nMax = 2 + iMaxWidth / cxChar;            //设置滚动条的最大值

  269.             si.nPage = cxClient / cxChar;      //设置滚动条一页的大小

  270.             SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);

  271.             return 0;



  272.       case WM_VSCROLL:      //滚动条滚动的时候发送此消息

  273.             si.cbSize = sizeof si;

  274.             si.fMask = SIF_ALL;

  275.             GetScrollInfo(hWnd, SB_VERT, &si);

  276.             iVerPos = si.nPos;      //保存竖直滚动条的位置

  277.             switch (LOWORD(wParam))

  278.             {

  279.             case SB_TOP:

  280.                   si.nPos = si.nMin;

  281.                   break;

  282.             case SB_BOTTOM:

  283.                   si.nPos = si.nMax;

  284.                   break;

  285.             case SB_LINEUP:

  286.                   si.nPos -= 1;

  287.                   break;

  288.             case SB_LINEDOWN:

  289.                   si.nPos += 1;

  290.                   break;

  291.             case SB_PAGEUP:

  292.                   si.nPos -= si.nPage;

  293.                   break;

  294.             case SB_PAGEDOWN:

  295.                   si.nPos += si.nPage;

  296.                   break;

  297.             case SB_THUMBTRACK:           

  298.                   si.nPos = si.nTrackPos;

  299.                   break;

  300.             default:

  301.                   break;

  302.             }

  303.             /*设置位置并且取得位置参数*/

  304.             si.fMask = SIF_POS;            //必须设置此处,否则滚动条不会移动!

  305.             SetScrollInfo(hWnd, SB_VERT, &si, TRUE);

  306.             GetScrollInfo(hWnd, SB_VERT, &si);

  307.             if (si.nPos!=iVerPos)      //对比前后的位置是否相等,位置不相等就滚动

  308.             {

  309.                   ScrollWindow(hWnd, 0, cyChar*(iVerPos - si.nPos), NULL, NULL);      //ScrollWindow函数用来生成一个无效的矩形而不用整个重绘客户区

  310.                   UpdateWindow(hWnd);           

  311.             }

  312.             return 0;



  313.       case WM_HSCROLL:

  314.             si.cbSize = sizeof si;

  315.             si.fMask = SIF_ALL;

  316.             GetScrollInfo(hWnd, SB_HORZ, &si);

  317.             iHorzPos = si.nPos;      //保存竖直滚动条的位置

  318.             switch (LOWORD(wParam))

  319.             {

  320.             case SB_TOP:

  321.                   si.nPos = si.nMin;

  322.                   break;

  323.             case SB_BOTTOM:

  324.                   si.nPos = si.nMax;

  325.                   break;

  326.             case SB_LINEUP:

  327.                   si.nPos -= 1;

  328.                   break;

  329.             case SB_LINEDOWN:

  330.                   si.nPos += 1;

  331.                   break;

  332.             case SB_PAGEUP:

  333.                   si.nPos -= si.nPage;

  334.                   break;

  335.             case SB_PAGEDOWN:

  336.                   si.nPos += si.nPage;

  337.                   break;

  338.             case SB_THUMBTRACK:

  339.                   si.nPos = si.nTrackPos;

  340.                   break;

  341.             default:

  342.                   break;

  343.             }

  344.             /*设置位置并且取得位置参数*/

  345.             si.fMask = SIF_POS;            //必须设置此处,否则滚动条不会移动!

  346.             SetScrollInfo(hWnd, SB_VERT, &si, TRUE);

  347.             GetScrollInfo(hWnd, SB_VERT, &si);

  348.             if (si.nPos != iHorzPos)

  349.             {

  350.                   ScrollWindow(hWnd, 0, cxChar*(iHorzPos - si.nPos), NULL, NULL);      //ScrollWindow函数用来生成一个无效的矩形而不用整个重绘客户区

  351.                   UpdateWindow(hWnd);

  352.             }

  353.             return 0;



  354.       case WM_PAINT:      //窗口绘制消息

  355.             /*重绘无效矩形即可,无需重新绘制全部客户区*/

  356.             hDc = BeginPaint(hWnd, &ps);      //获取窗口的设备描述表,注意函数BeginPaint只能在该消息中使用,使用完后需要用EndPaint来释放资源

  357.             si.cbSize = sizeof si;

  358.             si.fMask = SIF_POS;

  359.             GetScrollInfo(hWnd, SB_VERT, &si);

  360.             iVerPos = si.nPos;

  361.             GetScrollInfo(hWnd, SB_HORZ, &si);

  362.             iHorzPos = si.nPos;

  363.             iPaintBeg = max(0, iVerPos + ps.rcPaint.top / cyChar);      //ps.rcPaint就表示无效矩形,max函数是为了保证最小也要为0,不能出现负数

  364.             iPaintEnd = min(NUMLINES - 1, iVerPos + ps.rcPaint.bottom / cyChar);

  365.             for (i = iPaintBeg; i <= iPaintEnd; i++)

  366.             {

  367.                   x = cxChar*(1 - iHorzPos);

  368.                   y = cyChar*(i - iVerPos);      //使显示内容重画,随着滚动条的滚动变化

  369.                   TextOut(hDc, x, y, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel));      //采用TextOut函数在窗口中绘制文字,其实也可以用DrawText函数

  370.                   TextOut(hDc, x + 22 * cxCaps, y, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));

  371.                   SetTextAlign(hDc, TA_RIGHT | TA_TOP);      //运用SetTextAlign函数设置文字右对齐

  372.                   TextOut(hDc, x + 22 * cxCaps + 40 * cxChar, y, szBuffer, _stprintf_s(szBuffer, TEXT("%5d"), GetSystemMetrics(sysmetrics[i].iIndex)));

  373.                   SetTextAlign(hDc, TA_LEFT | TA_TOP);      //运用SetTextAlign函数将对齐方式设置回去

  374.             }

  375.             EndPaint(hWnd, &ps);

  376.             return 0;

  377.      

  378.       case WM_DESTROY:      //窗口销毁消息

  379.             PostQuitMessage(0);

  380.             return 0;

  381.       }

  382.       return DefWindowProc(hWnd, message, wParam, lParam);      //其他消息调用windows默认回调函数处理

  383. }
复制代码





上一篇:IScriptControl那个接口怎么没开源啊
下一篇:com口之间数据发送出错
81_avatar_middle
online_moderator 发表于 2015-10-15 22:16:49 | 显示全部楼层
你这个是书中源码,还是手抄的?
01_avatar_middle
ico_lz  楼主| 发表于 2015-10-15 22:39:24 | 显示全部楼层
Debug 发表于 2015-10-15 22:16
你这个是书中源码,还是手抄的?

手抄,但是运行和书上是一致的,我只是添加了注释而已。
81_avatar_middle
online_moderator 发表于 2015-10-15 23:11:52 | 显示全部楼层
硫酸亚铜 发表于 2015-10-15 22:39
手抄,但是运行和书上是一致的,我只是添加了注释而已。

照例说书上的例子应该不至于出错,我猜还是你抄错了
网上有不少《Windows程序设计 第五版》的源码,楼主不妨下载下来编译下书中的原版源码,看看是不是有同样的问题
01_avatar_middle
ico_lz  楼主| 发表于 2015-10-16 11:28:58 | 显示全部楼层
Debug 发表于 2015-10-15 23:11
照例说书上的例子应该不至于出错,我猜还是你抄错了
网上有不少《Windows程序设计 第五版》的源码,楼主 ...

我知道啊,我反反复复看了书上的代码,确实没有处理水平滚动条的消息!不是我抄错了,是他本来就有问题
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-25 01:00

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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