#include <Windows.h>
#include <windowsx.h>
#include <CommCtrl.h>
#include "resource.h"
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
// 对话框的回调函数,消息处理了返回 TRUE,没有处理返回 FALSE
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
// 当用户点击了关闭按钮时产生的消息,对话框要求必须使用 EndDialog 退出
case WM_CLOSE:
{
EndDialog(hDlg, 0);
break;
}
// 对话框的初始化消息是 WM_INITDIALOG,常用于进行控件的初始化
case WM_INITDIALOG:
{
// 1. 获取进度条控件和滑块控件的句柄
HWND hSlider = GetDlgItem(hDlg, IDC_SLIDER1);
HWND hProgress = GetDlgItem(hDlg, IDC_PROGRESS1);
// 2. 设置两个控件的数值表示范围
SendMessage(hSlider, TBM_SETRANGE, TRUE, MAKELPARAM(0, 1000));
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 1000));
// 3. 设置两个控件默认的位置
SendMessage(hSlider, TBM_SETPOS, TRUE, 50);
SendMessage(hProgress, PBM_SETPOS, 50, 0);
break;
}
//滑块控件响应的是滚动条消息,分为 WM_HCROLL \ WM_VSCROLL
case WM_HSCROLL:
{
HWND hSlider = (HWND)lParam;
// 通过发送消息的形式,知道滑块的位置
int nPos = SendMessage(hSlider, TBM_GETPOS, 0, 0);
// 将新的位置设置到进度条上
SendDlgItemMessage(hDlg, IDC_PROGRESS1, PBM_SETPOS, nPos, 0);
break;
}
default:
{
return FALSE;
}
}
return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 1. 是实例的句柄,用于标识资源所在的位置
// 2. 资源的ID,大多数时候会使用 MAKEINTRESOUERCE 进行转换
// 3. 对话框的父窗口,NULL 表示桌面
// 4. 回调函数,用于响应对话框产生的所有消息
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
return 0;
}