中年人学C语言Windows程序设计,32 WINDOWS图形界面的通信录程序实例

界面展示

我们利用前面所学的知识做一个图形界面的通信录,如下所示
在这里插入图片描述
利用listview做通信录信息的显示
然后添加4个按钮,添加,删除,修改和查询

点击添加和修改按钮会弹出 dialog窗口,进行编辑
在这里插入图片描述
输入信息后,
在这里插入图片描述
点击确定,则完成操作

在这里插入图片描述

代码实例

主要界面代码实例

//主窗口回调函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   
    /*回调函数
        参数:
        hwnd : 窗口句柄
        message : 消息ID
        wParam和lParam:消息参数*/
    HDC hdc;
    static TCHAR  szBuffer[128];
   
    static HWND childHwnd;        //子窗口句柄   
    static HWND hBtn, hBtn2, hBtn3, hBtn4;
    static int i,szlist;
    PAINTSTRUCT ps;
    static HWND hListview;
    static LV_COLUMN lvc;//LVCOLUMN结构体,定义listview的列属性
    static LVITEM vitem;//LVITEM结构体,定义listview的项的数据属性
    static int idComboBox;
    int n,wmId, wmEvent;
    //static int nSelectItem;
    int nSelectIndex;
    init(&contactlist);//初始化通信录
    switch (message)
    {
   
        case WM_SIZE:
        {
    
            
            hdc = GetDC(hWnd);
            cxClient = LOWORD(lParam);//当前x像素
            cyClient = HIWORD(lParam);//当前y像素
            //wsprintf(szBuffer, TEXT("%d,%d"), cxClient, cyClient);
            ReleaseDC(hWnd, hdc);
            return 0;
        }
        //定义父窗口回调函数 WndProc, 在处理 WM_CREATE 消息时创建子窗口:
        case WM_CREATE:        //在接收到 WM_CREATE 消息时创建一个子窗口      
        {
          
            //创建逻辑字体
            hFont = CreateFont(
                -18/*高度*/, -9/*宽度*/, 0, 0, 400 /*一般这个值设为400*/,
                FALSE/*不带斜体*/, FALSE/*不带下划线*/, FALSE/*不带删除线*/,
                DEFAULT_CHARSET,  //使用默认字符集
                OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,  //这行参数不用管
                DEFAULT_QUALITY,  //默认输出质量
                FF_DONTCARE,  //不指定字体族*/
                TEXT("微软雅黑")); //字体名
           //创建listview子窗口
            hListview = CreateWindow(TEXT("SysListView32"), TEXT("LISTVIEW"),
                WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT | LVS_SHOWSELALWAYS,
                /*WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
                | LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS
                | LVS_SHAREIMAGELISTS | LVS_SINGLESEL,*/
                10, 10, 550, 490,
                hWnd, NULL, hInst, NULL);
            ListView_SetExtendedListViewStyle(hListview, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES);
            /*
                LVS_EX_FULLROWSELECT 选中高亮,可以进行整行选中
                LVS_EX_CHECKBOXES 勾选框
                LVS_EX_GRIDLINES 网格线
                */
            lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;//指定哪些成员包含有效信息的变量。该成员可以是零        
            lvc.fmt = LVCFMT_CENTER;  //列标题与列中子项文本的对齐方式。最左边一列的对齐方式始终是 LVCFMT_LEFT;
            lvc.pszText = TEXT("ID");//列的名称,如果正在设置列信息,则此成员是包含列标题文本的以空字符结尾的字符串的地址
            lvc.cx = 0;//设置列的宽度 ,这样就不会显示第一列
            SendMessage(hListview, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc); //LVM_INSERTCOLUMN表示添加列表示添加列,给第1列添加标体
            lvc.pszText = TEXT("姓名");//列的名称,如果正在设置列信息,则此成员是包含列标题文本的以空字符结尾的字符串的地址
            lvc.cx = 100;//设置列的宽度   
            SendMessage(hListview, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc); //LVM_INSERTCOLUMN表示添加列表示添加列,给第1列添加标体

            lvc.pszText = TEXT("年龄");
            lvc.cx = 100;
            SendMessage(hListview, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);

            lvc.pszText = TEXT("电话");
            lvc.cx = 100;
            SendMessage(hListview, LVM_INSERTCOLUMN, 3, (LPARAM)&lvc);
            lvc.pszText = TEXT("地址");
            //lvc.cx = cxClient - 400;

            SendMessage(hListview, LVM_INSERTCOLUMN, 4, (LPARAM)&lvc);
            ListView_SetColumnWidth(hListview,4, LVSCW_AUTOSIZE_USEHEADER);

            //SendMessage(hListview, LVM_SETTEXTCOLOR, 0, RGB(255, 255, 255));//设置文字颜色
            //SendMessage(hListview, LVM_SETTEXTBKCOLOR, 0, RGB(100, 0, 200));//设置文字背景颜色
            //SendMessage(hListview, LVM_SETBKCOLOR, 0, RGB(150, 255, 50));//设置控件背景颜色

            vitem.mask = LVIF_TEXT;
            szlist = contactlist.size;//获得通信录大小           

            for (i = 0; i < szlist; i++)
            {
   
                //先添加项再设置子项内容   
                //插入第一行数据,这一段代码是不可以少的。      
                vitem.iItem = i;//第几行的数据
                vitem.iSubItem = 0;//第1列  
                SendMessage(hListview, LVM_INSERTITEM, 0, (LPARAM)&vitem);//第一列为空数据,不添加数据。

                vitem.iSubItem = 1;//第2列  
                vitem.cchTextMax = 20;
                vitem.pszText = contactl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值