1.Slider用法
用SendMessage(HWND,UINT,WPARAM,LPARAM)
UINT 表示消息,slider响应的消息为以TBM开头的消息,如TBM_GETPOS,TBM_STTPOS,TBM_SETRANGE等等,可在MSDN中查询.当滑动条滑动时,通过发送WM_VSCROLL或WM_HSCROLL来响应.
注意 : 只有当用户使用键盘与滑块控件 (Slider Control) 交互时,滑块控件 (Slider Control) 才发送 TB_BOTTOM、TB_LINEDOWN、TB_LINEUP 和 TB_TOP 通知代码。只有当用户使用鼠标时才发送 TB_THUMBPOSITION 和 TB_THUMBTRACK 通知消息。在两种情况下都发送 TB_ENDTRACK、TB_PAGEDOWN 和 TB_PAGEUP 通知代码。
消息码如下:
switch( nSBCode )
{
case TB_BOTTOM: // VK_END
break;
case TB_ENDTRACK: // WM_KEYUP(用户释放了发送相关虚键控代码的键)
break;
case TB_LINEDOWN: // VK_RIGHT or VK_DOWN
break;
case TB_LINEUP: // VK_LEFT or VK_UP
break;
case TB_PAGEDOWN: // VK_NEXT
break;
case TB_PAGEUP: // VK_PRIOR
break;
case TB_THUMBPOSITION: //放开滑动条后的位置
break;
case TB_THUMBTRACK: // 当前位置
break;
case TB_TOP: //VK_HOME
break;
}
2.ProgressBar 进度条
同样可通过向控件发送消息来控制.其中消息以PBM开头.比如PBM_SETTEP,PBM_SETRANGE等等.
3.VScroll /HScroll 垂直滚动条/水平滚动条
可调用API函数来初始化或控制.如SetScrollRange(),GetScrollPos等.
也可通过向其发送消息SendMessage.消息以SBM开头,如SBM_SETPOS.
其发生动作时发送WM_VSCROLL/WM_HSCROLL来进行响应.消息码为:
SB_LINEUP,SB_PAGEUP,SB_PAGELEFT,SB_LINEDOWN,SB_THUMBPOSITON,SB_THUMBTRACK等,其余的可在MSDN中查询.
4.ListBox 列表框
同样两种方式都行.其中可以用宏来调用来实现其一些功能.如下:
ListBox_AddString, ListBox_GetCurSel, ListBox_InsrtString , ListBox_GetCount , ListBox_SetCurSel, ListBox_GetText,ListBox_DeleteString
SendMessage的消息以LB开头.LB_ADDSTRING,LB_GETTEXT等.具体见MSDN.
5.ComboBox 组合框
宏调用有ComboBox_AddString,ComboBox_GetLBText,其余的跟ListBox差不多.
SendMessage的消息以CB开头.CB_ADDSTRING,CB_DELETESTRING.还有很多,具体查看MSDN
6.Spin 旋转按钮
在SDK中,似乎没找到API函数来调用.我只能用SendMessage来向其发送消息.其消息为:
UDM_SETRANGE,UDM_GETPOS,UDN_DELTAPOS(当点击旋转按钮发送该消息).
NMUPDOWN结构体成员idelta指定增量..但是当我在弄的时候,发现idelta要乘以一个零点几的数.(0<x<1,0.5,0.6都行),才可以正常的来控制.要不然按上下的按钮有时候都是增大,并且会超出范围.也不知道怎么回事.(待解决!)
7.ListView
利用LVCOLUMN 结构体来添加列.
如定义LVCOLUMN lv,lv.mask = LVCF_TEXT | LVCF_WIDTH//LVCOLUMN中的成员pszText和cx有效.可设置列宽,设置每列的名字.
LVCOLUMN lv; //插入项结构体。
HWND hwndList = GetDlgItem(hwnd,IDC_LIST1);
lv.mask = LVCF_TEXT|LVCF_WIDTH; //设置类型。
lv.cx = 80;//各项距离。
lv.cchTextMax =20;//字宽。
lv.pszText = TEXT("学 号");
///插入项消息。
SendMessage(hwndList,LVM_INSERTCOLUMN,0,(LPARAM)&lv);
lv.pszText = TEXT("姓 名");
lv.cx = 70;
SendMessage(hwndList,LVM_INSERTCOLUMN,1,(LPARAM)&lv);
lv.pszText = TEXT("性 别");
lv.cx = 40;
ListView_InsertColumn(hwndList,2,&lv);
lv.pszText = TEXT("年 龄");
lv.cx = 50;
SendMessage(hwndList,LVM_INSERTCOLUMN,3,(LPARAM)&lv);
lv.pszText = TEXT("专 业");
lv.cx = 70;
SendMessage(hwndList,LVM_INSERTCOLUMN,4,(LPARAM)&lv);
lv.pszText = TEXT("籍 贯");
lv.cx = 70;
ListView_InsertColumn(hwndList,5,&lv);
lv.pszText = TEXT("联系方式");
lv.cx = 100;
ListView_InsertColumn(hwndList,6,&lv);
SendMessage(hwndList,LVM_SETBKCOLOR,0,(LPARAM)RGB(30,180,180));
ListView_SetTextBkColor(hwndList,RGB(210,0,0));//设置列表框背景色。
ListView_SetTextColor(hwndList,RGB(0,0,255));//字体颜色。
DWORD dwStyle = GetWindowLong(hwndList,GWL_STYLE);//得到列表类型。
dwStyle |= LVS_REPORT; //该表列表框为REPORT型。
SetWindowLong(hwndList,GWL_STYLE,dwStyle);//设置列表类型。
当插入子项时,利用LVITEM结构体.第一项用ListView_InsertItem,第二项及以后的必须用ListView_SetItem.
lv.mask = LVIF_TEXT;
lv.iSubItem = 0;
lv.iItem = i;
lv.pszText = Sps[i].cStudentID;
ListView_InsertItem(hwndList,&lv);
lv.iSubItem = 1;
lv.pszText = Sps[i].cName;
ListView_SetItem(hwndList,&lv);
lv.iSubItem = 2;
lv.pszText = Sps[i].cSex;
ListView_SetItem(hwndList,&lv);
lv.iSubItem = 3;
lv.pszText = Sps[i].cAge;
ListView_SetItem(hwndList,&lv);
lv.iSubItem = 4;
lv.pszText = Sps[i].cGrade;
ListView_SetItem(hwndList,&lv);
lv.iSubItem = 5;
lv.pszText = Sps[i].cAddr;
ListView_SetItem(hwndList,&lv);
lv.iSubItem = 6;
lv.pszText = Sps[i].cConn;
ListView_SetItem(hwndList,&lv);
SendMessage 消息以LVM开头.如LVM_GETBKCOLOR,LVM_INSERTCOLUMN等.
7.TreeView 树形控件
利用TVINSERTSTRUCT结构体插入父节点.
Item为TVITEM结构体类型变量.
HTREEITEM h_Child;
TVINSERTSTRUCT tvi;
HWND hwndTree = GetDlgItem(hwnd,IDC_TRV1);
tvi.item.mask = TVIF_TEXT | TVIF_IMAGE //类型。
|TVIF_SELECTEDIMAGE | TVIF_PARAM;
tvi.hInsertAfter = TVI_LAST;
tvi.hParent = TVI_ROOT;
tvi.hParent = NULL;
tvi.item.iImage = 1;//未选中时图标的索引号
tvi.item.iSelectedImage = 0;//选中时图标的索引
tvi.item.pszText = TEXT("本科生");
h_Child = TreeView_InsertItem(hwndTree,&tvi);
然后插入父节点下的子项.
TVINSERTSTRUCT tvi;
HTREEITEM h_Child;
tvi.item.mask = TVIF_TEXT| TVIF_IMAGE
|TVIF_SELECTEDIMAGE | TVIF_PARAM;;
tvi.hParent = hParent;//父节点
tvi.item.iImage = 0;
tvi.item.iSelectedImage = 1;
tvi.item.pszText = TEXT("数学科学与计算技术");
h_Child = TreeView_InsertItem(hwnd,&tvi);//返回HTREEITEM变量.
SendMessage消息以TVM开头.TVM_INSERTITEM等
8.在ListView和TreeView中加载图标列表.
HIAMGELIST hImage;
HICON hIncon;
HIMAGELIST ImageList_Create()创建图标列表.
HICON LoadIcon()返回HICON类型值.
ImageList_AddIcon(HIMAGELIST,HICON),添加图标.
ListView_SetImageList(),TreeView_SetImageList()添加到控件中.
9.创建表单.
PROPSHEETPAGE psp[N];N张属性表单.
PROPSHEETHEADR psh;属性页头.
PropertySheet(&psh)来创建表单.
psp.pfnDlgPro = Proc (属性表单函数)
BOOL CALLBACK Proc(HWND ,UINT ,WPARAM,LPARAM)
在Proc中定义消息响应..跟在winmain函数中差不多
psp[0].dwSize = sizeof(PROPSHEETPAGE);
psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[0].hInstance = g_hinst;
psp[0].pszTemplate = MAKEINTRESOURCE(DLG_SHOLL);
psp[0].pszIcon = MAKEINTRESOURCE(IDI_SHOLL);
psp[0].pfnDlgProc = FontDialogProc;
psp[0].pszTitle = MAKEINTRESOURCE(IDS_SHOLL);
psp[0].lParam = 0;
psp[0].pfnCallback = NULL;
BOOL CALLBACK Proc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
break;
}
default:
DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
return TRUE;
}.