www.pudn.com > 嵌入式linux9应用开发祥解.rar > listbox.c


#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 

#define IDC_CTRL1     100
#define IDC_CTRL2     110
#define IDC_CTRL3     120
#define IDC_CTRL4     130
#define IDC_CTRL5     140
#define IDC_CTRL6     150

static HWND hMainWnd = HWND_INVALID;

static int ControlTestWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    static HWND hChildWnd1, hChildWnd2, hChildWnd3, hChildWnd4;
 //   static HWND hChildWnd5, hChildWnd6;
    static HICON hIcon1, hIcon2;
    LISTBOXITEMINFO lbii;

    switch (message) {
        case MSG_CREATE:
            hChildWnd1 = CreateWindow ("Edit", 
                              "Add ListBox Item",
                              WS_CHILD | WS_VISIBLE | WS_BORDER, 
                              IDC_CTRL1, 
                              10, 5, 190, 25, hWnd, 0);

            hChildWnd2 = CreateWindow ("button", 
                              "添加",
                              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
                              IDC_CTRL2, 
                              210, 5, 60, 25, hWnd, 0);

            hChildWnd3 = CreateWindow ("listbox", 
                              "Listbox", 
                              WS_CHILD | WS_VISIBLE | WS_BORDER | 
                              LBS_SORT | 
                              LBS_AUTOCHECKBOX | LBS_USEICON |
                              WS_VSCROLL, 
                              IDC_CTRL3, 
                              10, 35, 190, 100, hWnd, 0);

            hChildWnd4 = CreateWindow ("button", 
                              "删除",
                              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                              IDC_CTRL4,
                              210, 40, 60, 25, hWnd, 0);
                              


            hIcon1 = LoadIconFromFile (HDC_SCREEN, "res/audio.ico", 1);
            hIcon2 = LoadIconFromFile (HDC_SCREEN, "res/cddrive.ico", 1);
            lbii.insPos = 0;
            lbii.hIcon = hIcon1;

            lbii.cmFlag = CMFLAG_CHECKED;
            lbii.string = "listitem1";
            SendMessage (hChildWnd3, LB_ADDSTRING, 0, (LPARAM)&lbii);
            lbii.cmFlag = CMFLAG_BLANK;
            lbii.string = "listitem2";
            SendMessage (hChildWnd3, LB_ADDSTRING, 0, (LPARAM)&lbii);
            lbii.cmFlag = CMFLAG_PARTCHECKED;
            lbii.string = "listitem3";
            SendMessage (hChildWnd3, LB_ADDSTRING, 0, (LPARAM)&lbii);
            lbii.cmFlag = CMFLAG_CHECKED;
            lbii.string = "listitem4";
            SendMessage (hChildWnd3, LB_ADDSTRING, 0, (LPARAM)&lbii);
        break;

        case MSG_COMMAND:
        {
            int id = LOWORD (wParam);
            int code = HIWORD (wParam);
            char buffer [100];
            int curSel;

            switch (id) {
            case IDC_CTRL2:
                SendMessage (hChildWnd1, MSG_GETTEXT, 99, (LPARAM)buffer);
                if (buffer[0] != '\0') {
                    lbii.insPos = 0;
                    lbii.cmFlag = CMFLAG_BLANK;
                    lbii.hIcon = hIcon2;
                    lbii.string = buffer;
                    SendMessage (hChildWnd3, LB_ADDSTRING, 0, (LPARAM)&lbii);
                }
            break;
        
            case IDC_CTRL4:
                curSel = SendMessage (hChildWnd3, LB_GETCURSEL, 0, 0);
                if (curSel >= 0) {
                    if (MessageBox (hWnd, 
                            "您确定要删除这一列表项吗?",
                            "Listbox",
                            MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)
                            SendMessage (hChildWnd3, LB_DELETESTRING, 
                                curSel, 0);
                }
            break;
        

            case IDC_CTRL3:
                if (code == LBN_CLICKCHECKMARK) {
                    int flag;
                    int curHilighted;
            
                    return 0;

                    curHilighted = SendMessage (hChildWnd3,
                            LB_GETCARETINDEX, 0, 0);
                    flag = SendMessage (hChildWnd3, 
                            LB_GETCHECKMARK, curHilighted, 0);
                    if (flag == LB_ERR)
                        break;

                    flag = flag + 1;
                    if (flag > CMFLAG_PARTCHECKED)
                        flag = 0;
                    SendMessage (hChildWnd3, 
                    LB_SETCHECKMARK, curHilighted, 
                            flag);
                }
            }
        }
        break;
        
        case MSG_CLOSE:
            DestroyWindow (hChildWnd1);
            DestroyWindow (hChildWnd2);
            DestroyWindow (hChildWnd3);
            DestroyWindow (hChildWnd4);

            DestroyMainWindow (hWnd);
            DestroyIcon (hIcon1);
            DestroyIcon (hIcon2);
            MainWindowCleanup (hWnd);
            hMainWnd = HWND_INVALID;
        return 0;
    }

    return DefaultMainWinProc(hWnd, message, wParam, lParam);
}

static void InitCreateInfo(PMAINWINCREATE pCreateInfo)
{
    pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER | WS_MINIMIZEBOX 
                                      | WS_MAXIMIZEBOX
                                      | WS_VISIBLE;
    pCreateInfo->dwExStyle = WS_EX_NONE;
    pCreateInfo->spCaption = "ListBox control" ;
    pCreateInfo->hMenu = 0;
    pCreateInfo->hCursor = GetSystemCursor (IDC_ARROW);
    pCreateInfo->hIcon = 0;
    pCreateInfo->MainWindowProc = ControlTestWinProc;
    pCreateInfo->lx = 0; 
    pCreateInfo->ty = 0;
    pCreateInfo->rx = 400;
    pCreateInfo->by = 300;
    pCreateInfo->iBkColor = GetWindowElementColor (BKC_CONTROL_DEF); 
    pCreateInfo->dwAddData = 0;
    pCreateInfo->hHosting = HWND_DESKTOP;
}

void listbox_demo (HWND hwnd)
{
    MAINWINCREATE CreateInfo;

    if (hMainWnd != HWND_INVALID) {
        ShowWindow (hMainWnd, SW_SHOWNORMAL);
        return;
    }

    InitCreateInfo (&CreateInfo);
    CreateInfo.hHosting = hwnd;

    hMainWnd = CreateMainWindow (&CreateInfo);
}