#include<Windows.h>
#include<CommCtrl.h>
#include"resource.h"
#pragma comment(lib,"Comctl32.lib")
BOOL CALLBACK ControlDlg(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK TabPageDlg(HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
hInst = hInstance;
return DialogBox(hInstance, TEXT("CTLTest"), NULL, ControlDlg);
}
BOOL CALLBACK ControlDlg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hTab, hTabPage[2], hCombo, hProgress, hTree, hListBox, hSlider, hList, hListIcon, hAnimate, hPicture;
LPNMHDR lpHd;
static int n = 0;
static HIMAGELIST hImageList;
switch (msg)
{
case WM_INITDIALOG:
SetTimer(hwnd, 1, 1000, NULL);
//Animation Control控件,没有真正实现,因为找不到合适的播放文件,但基本原理已经包含在里面了
hAnimate = GetDlgItem(hwnd, IDC_ANIMATE1);
//Tab Control控件
TCITEM tcItem;
RECT rc;
hTab = GetDlgItem(hwnd, IDC_TAB1);
tcItem.mask = TCIF_TEXT;
tcItem.pszText = TEXT("页面1");
SendMessage(hTab, TCM_INSERTITEM, 0, (LPARAM)&tcItem);
tcItem.pszText = TEXT("页面2");
SendMessage(hTab, TCM_INSERTITEM, 1, (LPARAM)&tcItem);
GetClientRect(hTab, &rc);
rc.top += 20;
rc.left += 4;
rc.right -= 1;
rc.bottom -= 2;
hTabPage[0] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TABPAGE1), hTab, TabPageDlg);
hTabPage[1] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TABPAGE2), hTab, TabPageDlg);
MoveWindow(hTabPage[0], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
MoveWindow(hTabPage[1], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
ShowWindow(hTabPage[0], SW_SHOW);
ShowWindow(hTabPage[1], SW_HIDE);
//Combo控件
hCombo = GetDlgItem(hwnd, IDC_COMBO1);
SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)TEXT("First"));//注意在开始之前,到可视化界面向下拉ComboBox的显示区域
SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)TEXT("Second"));
//Progress Control控件
hProgress = GetDlgItem(hwnd, IDC_PROGRESS1);
SendMessage(hProgress, PBM_SETRANGE32, 0, 100);
SendMessage(hProgress, PBM_SETPOS, 0, 0);
SendMessage(hProgress, PBM_SETBARCOLOR, 0, (LPARAM)RGB(125, 91, 179));
//Tree View控件,需要将TREEVIEW属性的Has Buttons、Has Lines和Lines At Boot设置为TRUE
hTree = GetDlgItem(hwnd, IDC_TREE1);
HTREEITEM hTreeDir[2];
TVITEM tvItem;
TV_INSERTSTRUCT tvIt;
tvItem.mask = TVIF_TEXT;
tvItem.pszText = TEXT("目录1");
tvIt.hParent = NULL;
tvIt.hInsertAfter = TVI_SORT;
tvIt.item = tvItem;
hTreeDir[0] = (HTREEITEM)SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)&tvIt);
tvItem.pszText = TEXT("目录2");
tvIt.hParent = NULL;
tvIt.hInsertAfter = TVI_SORT;
tvIt.item = tvItem;
hTreeDir[1] = (HTREEITEM)SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)&tvIt);
tvItem.pszText = TEXT("子目录1");
tvIt.hParent = hTreeDir[0];
tvIt.hInsertAfter = TVI_SORT;
tvIt.item = tvItem;
SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)&tvIt);
tvItem.pszText = TEXT("子目录2");
tvIt.hParent = hTreeDir[1];
tvIt.hInsertAfter = TVI_SORT;
tvIt.item = tvItem;
SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)&tvIt);
//ListBox控件
hListBox = GetDlgItem(hwnd, IDC_LIST1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)TEXT("List1"));
SendMessage(hListBox, LB_INSERTSTRING, 0, (LPARAM)TEXT("List2"));
SendMessage(hListBox, LB_ADDFILE, 0, (LPARAM)TEXT("D:\\test.txt"));//不过是去掉路径而已
SendMessage(hListBox, LB_SETCOLUMNWIDTH, 40, 0);
//Slider Control控件TrackBar
hSlider = GetDlgItem(hwnd, IDC_SLIDER1);
SendMessage(hSlider, TBM_SETRANGE, TRUE, (LPARAM)MAKELONG(0,100));
SendMessage(hSlider, TBM_SETPOS, TRUE, (LPARAM)50);
//ListControl控件report类型
hList = GetDlgItem(hwnd, IDC_LIST2);
LVITEM lvItem;
LVCOLUMN lvc;
hImageList = ImageList_Create(16, 16, ILC_COLOR, 0, 0); //创建一个ImageList
ImageList_Add(hImageList, LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1)), NULL);//加入图片
ImageList_Add(hImageList, LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2)), NULL);
SendMessage(hList, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)hImageList);//将ImageList映射进窗口
lvc.mask = LVCF_WIDTH|LVCF_TEXT;
lvc.cx = 50;
lvc.pszText = TEXT("列1");
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc);
lvc.cx = 50;
lvc.pszText = TEXT("列2");
SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc);
lvc.mask = LVCF_WIDTH | LVCF_IMAGE;
lvc.cx = 50;
lvc.iImage = 1;
SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc); //第三列用图标显示
ListView_SetExtendedListViewStyleEx(hList, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_SUBITEMIMAGES);//显示表格和图像,最后一个参数时显示图像用的
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;//这里注意不要使用LVFIF_*
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.iImage = 0;
lvItem.pszText = TEXT("数据1");
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lvItem);//用LVM_INSERTITEM插入元祖,即一行
lvItem.iItem = 0;
lvItem.iSubItem = 1;
lvItem.iImage = 1;
lvItem.pszText = TEXT("内容1");
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);//用LVM_SETITEM设置数据
lvItem.iItem = 1;
lvItem.iSubItem = 0;
lvItem.iImage = 1;
lvItem.pszText = TEXT("数据2");
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lvItem);//用LVM_INSERTITEM插入元祖,即一行
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 1;
lvItem.iSubItem = 1;
lvItem.pszText = TEXT("内容2");//这个单元没有设置图标
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);//用LVM_SETITEM设置数据
//ListControl ICON 控件使用 LVM_INSERTITEM,
hListIcon = GetDlgItem(hwnd, IDC_LIST3);
lvItem.mask = LVIF_IMAGE | LVIF_TEXT;
SendMessage(hListIcon, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)hImageList);
lvItem.iImage = 0;
lvItem.pszText = TEXT("ICON1");
lvItem.iItem = 0; //这个可以不用设置
lvItem.iSubItem = 0; //这个是必须的,并且为0,否则显示不出来,目前原因不明
SendMessage(hListIcon, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
lvItem.iImage = 1;
lvItem.pszText = TEXT("ICON3");
lvItem.iItem = 0;
lvItem.iSubItem = 0;
SendMessage(hListIcon, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
lvItem.iImage = 1;
lvItem.pszText = TEXT("ICON2");
lvItem.iItem = 0;
lvItem.iSubItem = 0;
SendMessage(hListIcon, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
//Picturn Control控件,隶属于Static Control,所以用的是同一类消息
hPicture = GetDlgItem(hwnd, IDC_STATIC1);
SendMessage(hPicture, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1)));
break;
case WM_TIMER:
if (n <= 10)
{
SendMessage(hProgress, PBM_SETPOS, 10 * n, 0);
n++;
}
else
KillTimer(hwnd, 1);
break;
case WM_NOTIFY: //一般情况下,容器型的控件会发送这个消息,如果没有这个消息可以设置控件的notify属性来接受这个消息,当然也可以用控件常用的WM_COMMAND消息
lpHd = (LPNMHDR)lParam;
//MessageBox(hwnd, "d", TEXT("当前位置"), MB_OK);
if (lpHd->code == TCN_SELCHANGE&&lpHd->hwndFrom==hTab)//Tab Control控件消息
{
int iSelect = SendDlgItemMessage(hwnd, IDC_TAB1, TCM_GETCURSEL, 0, 0);
switch (iSelect)
{
case 0:
ShowWindow(hTabPage[0], SW_SHOW);
ShowWindow(hTabPage[1], SW_HIDE);
break;
case 1:
ShowWindow(hTabPage[0], SW_HIDE);
ShowWindow(hTabPage[1], SW_SHOW);
break;
default:
break;
}
}
else if (lpHd->hwndFrom== hSlider)//code只有一个-12 Slider消息
{
int iPos = SendMessage(hSlider, TBM_GETPOS, 0, 0);
TCHAR szTmp[30];
wsprintf(szTmp, TEXT("%d"), iPos);
//MessageBox(NULL, szTmp, TEXT("当前位置"), MB_OK);
}
else if (lpHd->hwndFrom == hList&&lpHd->code == NM_CLICK) //ListView消息
{
int iSelect = ListView_GetSelectionMark(hList);
TCHAR szItem[100];
LVITEM lvItem;
//ListView_GetItemText(hList, iSelect, 1, szItem, 100)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
设计了Windows基本控件的使用,本程序使用C语言写的,主要是为了帮助大家理解这些控件的原理,同时为哪些想要学习C语言界面编程的人提供一些提示。MFC、C#的编程者也可以查看。里面的控件介绍包括TREEVIEW、Tab Control、Animation Control、Picture Control、Slider Control、List Control、ListView、Combo Box Control等
资源推荐
资源详情
资源评论



















收起资源包目录




































共 30 条
- 1
资源评论

- bjyqtx2016-04-14谢谢楼主的分享,对我很有帮助

youyuerlang
- 粉丝: 0
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络计划技术习题学生练习.doc
- 个人网络品牌推广与实施.doc
- 税务系统网络与安全信息生产管理技术培训.pptx
- 中国北方五金城项目管理月报.doc
- 软件开发专业实习周记范文.pdf
- 受限于在线服务器的 API 及微信消息推送
- 农业大数据技术前沿与应用.pptx
- 软件研发部绩效考核方案.pdf
- 基于Matlab锅炉仿真设计.doc
- 人工智能与教育融合及展望.doc
- 学校网络主控机房网络系统安全管理规则实施稿.doc
- 一级计算机基础与Photoshop应用真题十.doc
- 内蒙古准格尔旗高中数学第一章算法初步1.2循环语句例题课件新人教B版必修3.ppt
- 基于物联网的停车场引导及基础管理系统.docx
- 嵌入式图像压缩编解码研究.doc
- 计算机化学--计算机辅助分子设计.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
