1. #include <Windows.h>
    2. #include <windowsx.h>
    3. #include <CommCtrl.h>
    4. #include "resource.h"
    5. #ifdef _UNICODE
    6. #if defined _M_IX86
    7. #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    8. #elif defined _M_X64
    9. #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    10. #else
    11. #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    12. #endif
    13. #endif
    14. // 对话框的回调函数,消息处理了返回 TRUE,没有处理返回 FALSE
    15. INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    16. {
    17. switch (uMsg)
    18. {
    19. // 当用户点击了关闭按钮时产生的消息,对话框要求必须使用 EndDialog 退出
    20. case WM_CLOSE:
    21. {
    22. EndDialog(hDlg, 0);
    23. break;
    24. }
    25. // 对话框的初始化消息是 WM_INITDIALOG,常用于进行控件的初始化
    26. case WM_INITDIALOG:
    27. {
    28. // 1. 获取进度条控件和滑块控件的句柄
    29. HWND hSlider = GetDlgItem(hDlg, IDC_SLIDER1);
    30. HWND hProgress = GetDlgItem(hDlg, IDC_PROGRESS1);
    31. // 2. 设置两个控件的数值表示范围
    32. SendMessage(hSlider, TBM_SETRANGE, TRUE, MAKELPARAM(0, 1000));
    33. SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 1000));
    34. // 3. 设置两个控件默认的位置
    35. SendMessage(hSlider, TBM_SETPOS, TRUE, 50);
    36. SendMessage(hProgress, PBM_SETPOS, 50, 0);
    37. break;
    38. }
    39. //滑块控件响应的是滚动条消息,分为 WM_HCROLL \ WM_VSCROLL
    40. case WM_HSCROLL:
    41. {
    42. HWND hSlider = (HWND)lParam;
    43. // 通过发送消息的形式,知道滑块的位置
    44. int nPos = SendMessage(hSlider, TBM_GETPOS, 0, 0);
    45. // 将新的位置设置到进度条上
    46. SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETPOS, nPos, 0);
    47. break;
    48. }
    49. default:
    50. {
    51. return FALSE;
    52. }
    53. }
    54. return TRUE;
    55. }
    56. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    57. {
    58. // 1. 是实例的句柄,用于标识资源所在的位置
    59. // 2. 资源的ID,大多数时候会使用 MAKEINTRESOUERCE 进行转换
    60. // 3. 对话框的父窗口,NULL 表示桌面
    61. // 4. 回调函数,用于响应对话框产生的所有消息
    62. DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
    63. return 0;
    64. }

    image.png