SDK 编程之控件

来源:互联网 发布:ps4热血无赖淘宝暗号 编辑:程序博客网 时间:2024/05/23 02:09

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;

}.


原创粉丝点击