1)什么是树视图控件
2)样式
3)向控件发送消息设置控件
4)控件向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> #include"resource.h" //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 //#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") #pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == TVN_SELCHANGED) { LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; TVITEM &itemNew = pnmtv->itemNew; if (itemNew.state & TVIS_SELECTED) { //根据树节点句柄获取文本 TVITEM tv; tv.mask = TVIF_TEXT; TCHAR buf[64] = {0}; tv.pszText = buf; tv.cchTextMax = 64; tv.hItem = itemNew.hItem; //查找这个节点的文本 SendMessage(pHDR->hwndFrom, TVM_GETITEM, 0, (LPARAM)&tv); MessageBox(hWnd, tv.pszText, L"提示", MB_OK); } } }break; case WM_CREATE: { //创建树控件 HWND hTreeView = CreateWindow(WC_TREEVIEW, NULL, WS_CHILD | WS_VISIBLE | TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT, 30, 30, 300, 300, hWnd, (HMENU)111, GetModuleHandle(NULL), NULL); //创建图标列表 HIMAGELIST hImageList = ImageList_Create(16, 16, ILC_MASK, 3, 1); //添加图标到ImageLists for (int i = 0; i < 3; ++i) { HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1 + i)); ImageList_AddIcon(hImageList, hIcon); DestroyIcon(hIcon); } //设置树控件的图像列表 SendMessage(hTreeView, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)hImageList); //添加树根节点到控件 TVINSERTSTRUCT tvs; tvs.hInsertAfter = TVI_ROOT; tvs.hParent = NULL; TVITEM tv; tv.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tv.pszText = L"根节点"; tv.iImage = 2; tv.iSelectedImage =2; tvs.item = tv; HTREEITEM hRoot=(HTREEITEM)SendMessage(hTreeView, TVM_INSERTITEM, 0, (LPARAM)&tvs); //插入子节点 TVINSERTSTRUCT tvs2; tvs2.hInsertAfter = TVI_LAST; tvs2.hParent = hRoot; TVITEM tv2; tv2.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tv2.pszText = L"子节点1"; tv2.iImage = 1; tv2.iSelectedImage =1; tvs2.item = tv2; HTREEITEM hChild1 = (HTREEITEM)SendMessage(hTreeView, TVM_INSERTITEM, 0, (LPARAM)&tvs2); //插入子节点 TVINSERTSTRUCT tvs3; tvs3.hInsertAfter = TVI_LAST; tvs3.hParent = hRoot; TVITEM tv3; tv3.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tv3.pszText = L"子节点2"; tv3.iImage = 0; tv3.iSelectedImage = 0; tvs3.item = tv3; HTREEITEM hChild2 = (HTREEITEM)SendMessage(hTreeView, TVM_INSERTITEM, 0, (LPARAM)&tvs3); //展开树节点 SendMessage(hTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)hRoot); //选择节点 SendMessage(hTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hChild1); //让树控件有焦点 SetFocus(hTreeView); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
二、上下控件
1)什么是上下控件
2)样式
3)向控件发送消息设置控件
4)向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == UDN_DELTAPOS) { LPNMUPDOWN pNM = (LPNMUPDOWN)lParam; TCHAR buf[64] = {0}; wsprintf(buf, L"iDelta: %d iPos:%d", pNM->iDelta, pNM->iPos); MessageBox(hWnd, buf, L"提示", MB_OK); pNM->iDelta = -pNM->iDelta;//向上增加,向下减少 //return 1;//返回非0防止控件改变 } }break; case WM_CREATE: { //创建伙伴控件 HWND hEdit = CreateWindow(WC_EDIT, L"0", WS_CHILD | WS_VISIBLE | ES_NUMBER, 30, 30, 100, 50, hWnd, (HMENU)111, GetModuleHandle(NULL), NULL); //创建上下控件 HWND hUpDown= CreateWindow(UPDOWN_CLASS , NULL, WS_CHILD | WS_VISIBLE | UDS_AUTOBUDDY| UDS_WRAP /*循环*/|UDS_ALIGNRIGHT|UDS_SETBUDDYINT, 0, 0, 0, 0, hWnd, (HMENU)222, GetModuleHandle(NULL), NULL); //设置控件范围 SendMessage(hUpDown, UDM_SETRANGE, 0, MAKELPARAM(1, 10)); //设置当前的值 SendMessage(hUpDown, UDM_SETPOS, 0, 6); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是IP地址控件
2)样式
3)向控件发送消息设置控件
4)控件向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == IPN_FIELDCHANGED) { LPNMIPADDRESS pNM = (LPNMIPADDRESS)lParam; TCHAR buf[64] = {0}; wsprintf(buf, L"iField %d , iValue %d ", pNM->iField, pNM->iValue); OutputDebugString(buf); } }break; case WM_CREATE: { //创建IP控件 HWND hIPAddress = CreateWindow(WC_IPADDRESS, NULL, WS_CHILD | WS_VISIBLE, 30, 30, 200, 30, hWnd,(HMENU)111, GetModuleHandle(NULL), NULL); //设置IP地址控件的值 SendMessage(hIPAddress, IPM_SETADDRESS, 0, MAKEIPADDRESS(192,168,0,1)); //设置每个输入的范围 SendMessage(hIPAddress, IPM_SETRANGE, 0, MAKEIPRANGE(1,10)); SendMessage(hIPAddress, IPM_SETRANGE, 1, MAKEIPRANGE(100, 200)); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是分页控件
2)样式
3)向控件发送消息设置控件
4)向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 //#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == PGN_CALCSIZE) { //设置包含窗口的大小 LPNMPGCALCSIZE pNM = (LPNMPGCALCSIZE)lParam; if (pNM->dwFlag == PGF_CALCWIDTH)//水平风格的的计算宽度,垂直的则需要计算高度 { pNM->iWidth = 600; pNM->iHeight = 30; } return 0; } if (pHDR->code == PGN_SCROLL) { //通知一次滚动多少 LPNMPGSCROLL pNM = (LPNMPGSCROLL)lParam; pNM->iScroll = 500; //修改滚动步长 } }break; case WM_CREATE: { //创建分页控件 HWND hPage = CreateWindow(WC_PAGESCROLLER, NULL, WS_CHILD | WS_VISIBLE | PGS_HORZ, 30, 30, 200, 50, hWnd, (HMENU)111, GetModuleHandle(NULL), NULL); //创建一个内容比较长的按钮 HWND hBtn=CreateWindow(WC_BUTTON, L"开始,这是一个标题很长很长很长很长很长很长很长很长很长很长的按钮,现在才结束!", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hPage/*父窗口是分页控件*/, (HMENU)222, GetModuleHandle(NULL), NULL); //设置分页控件的子窗口 SendMessage(hPage, PGM_SETCHILD, 0, (LPARAM)hBtn); //设置按钮箭头的宽度 SendMessage(hPage, PGM_SETBUTTONSIZE, 0, (LPARAM) 30); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是工具条控件
2)样式
3)向父窗口发送消息
4)代码实例
#include<windows.h> #include<CommCtrl.h> #include"resource.h" //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") #pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); if(code==0) { TCHAR buf[64]; wsprintf(buf, L"ID %d 按钮被点击!", CtrlID); MessageBox(hWnd, buf, L"提示", MB_OK); } }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == PGN_CALCSIZE) { //LPNMPGCALCSIZE pNM = (LPNMPGCALCSIZE)lParam; } }break; case WM_CREATE: { //创建工具条控件 HWND hToolBar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0,0, 0, 0, hWnd, (HMENU)111, GetModuleHandle(NULL), NULL); //创建图像列表 HIMAGELIST hImageList = ImageList_Create(32, 32, //单个位图的尺寸 ILC_COLOR32 | ILC_MASK /*确保透明背景*/, 3, 1); for (int i = 0; i< 3; i++) { HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1 + i)); ImageList_AddIcon(hImageList, hIcon); DestroyIcon(hIcon); } //设置工具条的图片列表 SendMessage(hToolBar, TB_SETIMAGELIST, 0, (LPARAM)hImageList); //添加一些按钮到工具条上去 TBBUTTON btn1 , btn2; btn1.fsState = TBSTATE_ENABLED; btn1.iString = (INT_PTR)L"按钮1"; btn1.fsStyle = TBSTYLE_BUTTON; btn1.idCommand = 2000; btn1.iBitmap = 1; btn2.iString = (INT_PTR)L"按钮2"; btn2.fsState = TBSTATE_ENABLED; btn2.fsStyle = TBSTYLE_BUTTON; btn2.idCommand = 3000; btn2.iBitmap=2; TBBUTTON arr[2] = { btn1,btn2 }; SendMessage(hToolBar, TB_ADDBUTTONS, 2, (LPARAM)&arr); //自动调整工具条的大小并显示 SendMessage(hToolBar, TB_AUTOSIZE, 0, 0); ShowWindow(hToolBar, true); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是提示控件
2)样式
3)向控件发送消息设置控件
4)向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> //#include"resource.h" //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); if (code == 0) { } }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == TTN_SHOW) { //MessageBox(hWnd, L"提示框要出来了", L"提示" ,MB_OK); OutputDebugString(L"提示框要出来了 "); } }break; case WM_CREATE: { //创建提示控件 HWND hTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP|TTS_BALLOON, 0, 0, 0, 0, hWnd, NULL/*传入NULL*/, GetModuleHandle(NULL), NULL); //像提示控件注册 窗口 TOOLINFO ti; ti.cbSize = sizeof(TOOLINFO); ti.hinst = GetModuleHandle(NULL); ti.hwnd = hWnd; //指定在哪个窗口上显示tip ti.lpszText = L"这是一个提示控件,用于鼠标移上去之后告诉用户一些信息!"; GetClientRect(hWnd, &ti.rect/*鼠标移到哪个区域 */); ti.uFlags = TTF_SUBCLASS; ti.uId = (UINT_PTR)hTip; //tip的窗口句柄 //注册需要tip的窗口 SendMessage(hTip, TTM_ADDTOOL, 0, (LPARAM)&ti); //设置tip窗口的宽度 SendMessage(hTip, TTM_SETMAXTIPWIDTH, 0, (LPARAM)100); //设置tip的显示时间(毫秒) SendMessage(hTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, MAKELPARAM( 10*1000, 0 )); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是状态栏控件
2)样式
3)向控件发送消息设置控件
4)向父窗口发送消息
5)代码实例
#include<windows.h> #include<CommCtrl.h> //#include"resource.h" //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_SIZE://窗口尺寸改变时 { //获取状态栏的句柄 HWND hStatus=GetDlgItem(hWnd, 111); SendMessage(hStatus, WM_SIZE, 0, 0);//通知状态栏重绘 }break; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); if (code == 0) { } }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == NM_CLICK && pHDR->idFrom==111) { MessageBox(hWnd, L"状态栏被点击!", L"提示", MB_OK); } }break; case WM_CREATE: { //创建状态栏控件 HWND hStatusBar = CreateWindow(STATUSCLASSNAME, NULL, WS_CHILD|WS_VISIBLE, 0, 0, 0, 0, hWnd, (HMENU)111, GetModuleHandle(NULL), NULL); //设置状态栏的文本 SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)L"状态栏文本"); //将状态栏分区域 int arr[3] = { 100,200,-1}; //代表起始x坐标 SendMessage(hStatusBar, SB_SETPARTS, 3, (LPARAM)arr ); //设置其他区域状态栏的文本 SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM)L"第二区域"); SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM)L"第三区域"); //设置状态栏的高度 SendMessage(hStatusBar, SB_SETMINHEIGHT, 50, 0); SendMessage(hStatusBar, WM_SIZE, 0, 0); //让状态栏重绘 }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
1)什么是控件条控件
2)样式
3)代码实例
#include<windows.h> #include<CommCtrl.h> //#include"resource.h" //使用Unicode版本必须加入manifest强制让应用程序加载common Control 6.0 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") //#pragma comment(lib,"Comctl32.lib") //自定义的窗口过程 LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 return 0; case WM_COMMAND: { WORD CtrlID = LOWORD(wParam); WORD code = HIWORD(wParam); if (code == 0) { } }break; case WM_NOTIFY: { NMHDR * pHDR = (NMHDR *)lParam; if (pHDR->code == RBN_CHILDSIZE) { LPNMREBARCHILDSIZE pNM = (LPNMREBARCHILDSIZE)lParam; RECT rcBand= pNM->rcBand; RECT rcChild = pNM->rcChild; TCHAR buf[64] = { 0 }; wsprintf(buf, L" %drcBand %d ,%d,%d ,%d ", pNM->wID,rcBand.left, rcBand.top, rcBand.right, rcBand.bottom); OutputDebugString(buf); } }break; case WM_CREATE: { //创建Rebar控件 HWND hRebar = CreateWindow(REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | RBS_VARHEIGHT, 0, 0, 0, 0, hWnd, NULL, GetModuleHandle(NULL), NULL); //子控件 HWND hBtn = CreateWindow(WC_BUTTON, L"按钮控件", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hRebar, //父窗口是Rebar (HMENU)111, ((LPCREATESTRUCT)lParam)->hInstance, NULL); HWND hEdit = CreateWindow(WC_EDIT, L"编辑控件", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 0, 0, 0, hRebar, //父窗口是Rebar (HMENU)222, ((LPCREATESTRUCT)lParam)->hInstance, NULL); //创建带区 REBARBANDINFO rb; rb.cbSize = sizeof(REBARBANDINFO); rb.lpText = L"控件条1"; rb.fMask = RBBIM_ID |RBBIM_TEXT|RBBIM_STYLE |RBBIM_CHILDSIZE| RBBIM_CHILD; rb.fStyle = RBBS_GRIPPERALWAYS; rb.cxMinChild = 100; rb.cyMinChild = 30; rb.hwndChild = hBtn; rb.wID = 1000; SendMessage(hRebar, RB_INSERTBAND, 0, (LPARAM)&rb); //创建带区2 REBARBANDINFO rb2; rb2.cbSize = sizeof(REBARBANDINFO); rb2.lpText = L"控件条2"; rb2.fMask = RBBIM_ID | RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILDSIZE | RBBIM_CHILD; rb2.fStyle = RBBS_GRIPPERALWAYS; rb2.cxMinChild = 100; rb2.cyMinChild =30; rb2.hwndChild = hEdit; rb2.wID = 2000; SendMessage(hRebar, RB_INSERTBAND, -1, (LPARAM)&rb2); }break; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //1.注册窗口类 WNDCLASS wnd; wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色 wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标 //wnd.lpfnWndProc = DefWindowProc;//默认窗口过程函数,用于处理消息 wnd.lpfnWndProc = MyWindowProc;//自定义的窗口过程函数 wnd.lpszClassName = L"MrHuang";//窗口类名 wnd.lpszMenuName = NULL;//菜单资源名称 wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类、样式 wnd.hInstance = hInstance;//实例句柄 RegisterClass(&wnd); //创建窗口(返回之前发送WM_CREATE) HWND hWnd = CreateWindow(L"MrHuang", L"第一个窗口程序", WS_OVERLAPPEDWINDOW, 100, 100, 400, 400, NULL, NULL, hInstance, NULL); //显示窗口 ShowWindow(hWnd, nShowCmd); //更新窗口(发送WM_PAINT) UpdateWindow(hWnd); //消息循环(收到WM_QUIT消息退出) MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息到窗口过程 } }
九、控件或子窗口操作
①GetDlgItem函数
②GetDlgItemText函数
③SetDlgItemText函数
④SendDlgItemMessage函数