Win32窗口高级列表控件的使用

1、实现点击按钮就插入一行;//小作业
2、实现点击按钮把界面编辑框的文本插入到列表中;//小作业
3、删除列表中指定的第4行,第5行;//小作业
4、点击按钮获取当前列表中有多少行,并用MessageBox提示出来!//小作业
5、整行选择。

#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <tchar.h>
#include <CommCtrl.h>
#include <windowsx.h>
static TCHAR szWindowClass[] = _T("WindowClass");    //窗口类名称
static TCHAR szTitle[] = _T("标题"); //窗口标题 
UINT IDC_LIST_1 = 300;    //子列表窗口ID
UINT IDC_BUTTON_1 = 400;
UINT IDC_BUTTON_2 = 4001;
UINT IDC_Edit_1 = 500;
    //处理发送到窗口的消息    
LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CREATE:
    {
        HWND hEditControl = CreateWindow(WC_EDIT,
            _T(""),
            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
            355, 0, 100, 80,
            hWnd,
            (HMENU)IDC_Edit_1,
            NULL, NULL
        );
        HWND hButtonControl = CreateWindow(WC_BUTTON,
            _T("实现点击按钮就插入一行"),
            WS_CHILD | WS_VISIBLE | WS_BORDER | BS_PUSHBUTTON,
            CW_USEDEFAULT,CW_USEDEFAULT,
            200,30,
            hWnd,
            (HMENU)IDC_BUTTON_1,
            NULL,NULL
        );
        HWND hButtonContro2 = CreateWindow(WC_BUTTON,
            _T("删除列表中4行5行"),
            WS_CHILD | WS_VISIBLE | WS_BORDER | BS_PUSHBUTTON,
            205, 0,
            150, 30,
            hWnd,
            (HMENU)IDC_BUTTON_2,
            NULL, NULL
        );
        HWND hListControl = CreateWindow(WC_LISTVIEW, _T(""),
            WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER,
            50, 50,
            300, 300,
            hWnd,
            (HMENU)IDC_LIST_1,    
            NULL, 
            NULL);
        //整行选择
        ListView_SetExtendedListViewStyle(hListControl, LVS_EX_FULLROWSELECT);    //扩展列表视图样式
        LVCOLUMN colInfo_0 = { 0 };
        colInfo_0.mask |= LVCF_WIDTH | LVCF_TEXT;
        colInfo_0.cx = 100;
        colInfo_0.pszText = (LPTSTR)_T("第0列");
        SendMessage(hListControl, LVM_INSERTCOLUMN, 0, (LPARAM)&colInfo_0);    //插入列
        LVCOLUMN colInfo_1 = { 0 };
        colInfo_1.mask |= LVCF_WIDTH | LVCF_TEXT;
        colInfo_1.cx = 100;
        colInfo_1.pszText = (LPTSTR)_T("第1列");
        SendMessage(hListControl, LVM_INSERTCOLUMN, 1, (LPARAM)&colInfo_1);
        LVCOLUMN colInfo_2 = { 0 };
        colInfo_2.mask |= LVCF_WIDTH | LVCF_TEXT;
        colInfo_2.cx = 100;
        colInfo_2.pszText = (LPTSTR)_T("第2列");
        ListView_InsertColumn(hListControl,2, (LPARAM)&colInfo_2);    //插入列
        //LV_ITEM row_item = { 0 };
        //row_item.mask |= LVIF_TEXT;
        //row_item.pszText = (LPTSTR)_T("AAAA");
        //ListView_InsertItem(hListControl,&row_item); //只能插入第0列

        //ZeroMemory(&row_item, sizeof(row_item));
        //row_item.mask |= LVIF_TEXT;
        //row_item.pszText = (LPTSTR)_T("BBBB");
        //row_item.iItem = 0;
        //row_item.iSubItem = 1;
        //ListView_SetItem(hListControl, &row_item);
    }
        break;
    case WM_COMMAND:
    {
        UINT nControlID = LOWORD(wParam);
        UINT nNotificationCode = HIWORD(wParam);
        if (nNotificationCode == BN_CLICKED)
        {
            if (nControlID == IDC_BUTTON_1)
            {
                
                //实现点击按钮把界面编辑框的文本插入到列表中
                TCHAR szText[MAX_PATH] = {0};
                Edit_GetText(GetDlgItem(hWnd, IDC_Edit_1), szText, MAX_PATH);

                //实现点击按钮就插入一行
                int iTotalRow = ListView_GetItemCount(GetDlgItem(hWnd, IDC_LIST_1));    //获取当前列表中有多少行
                LV_ITEM row_item = { 0 };
                row_item.mask |= LVIF_TEXT;
                row_item.pszText = szText;
                row_item.iItem = iTotalRow;
                int iRow = ListView_InsertItem(GetDlgItem(hWnd, IDC_LIST_1),&row_item);
                ListView_SetItemText(GetDlgItem(hWnd, IDC_LIST_1), iRow,1, szText);
            }
            if (nControlID == IDC_BUTTON_2)
            {
                //点击按钮获取当前列表中有多少行,并用MessageBox提示出来!
                int ItemCount = ListView_GetItemCount(GetDlgItem(hWnd, IDC_LIST_1));
                TCHAR szListItemCount[128] = { 0 };
                _stprintf(szListItemCount, _T("共有 %d 行!"), ItemCount);
                MessageBox(hWnd, szListItemCount,_T("A"),NULL);
                ZeroMemory(szListItemCount, sizeof(szListItemCount));
                
                //删除列表中指定的第4行,第5行
                /*ListView_DeleteItem(GetDlgItem(hWnd, IDC_LIST_1),4);
                ListView_DeleteItem(GetDlgItem(hWnd, IDC_LIST_1),4);*/

            }
        }
        
    }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
        break;
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
    WNDCLASSEX wcex = { 0 };
    wcex.cbSize = sizeof(WNDCLASSEX);    //此结构的大小
    wcex.lpfnWndProc = WindowProc;        //指向窗口过程的指针
    wcex.lpszClassName = szWindowClass;    //指定窗口类名称
    if (!RegisterClassEx(&wcex))    //注册一个窗口类
    {
        return 0;    //不成功返回0
    }
    HWND hWnd = CreateWindow(
        szWindowClass,    //窗口类名称
        szTitle,        //标题名称
        WS_OVERLAPPEDWINDOW,     //窗口样式
        CW_USEDEFAULT, CW_USEDEFAULT,    //窗口的初始位置
        500, 500,    //窗口的宽度和高度
        NULL,    //要创建的窗口的父窗口或所有者窗口的句柄
        NULL, //菜单的句柄
        hInstance,//“句柄型”数据类型。相当于装入到了内存的资源的ID
        NULL    //
    );
    if (!hWnd) return 0;
    ShowWindow(hWnd, SW_SHOW); //激活窗口并以其当前大小和位置显示它

    MSG msg = { 0 };
        
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);    //将虚拟键消息转换为字符消息
        DispatchMessage(&msg);    //将消息调度到窗口过程
    }
    return (int)msg.wParam;
}

 

posted on 2021-01-27 16:06  SakuraQAQ  阅读(346)  评论(0)    收藏  举报

导航