我用下面代码在主窗口上动态建立了一个listview控件,请问怎么编辑 消息响应函数 来响应listview控件内的鼠标消息?
别用MFC的代码 谢谢。
switch (message)
{
case WM_CREATE:    RECT rcl; 
    INITCOMMONCONTROLSEX icex;
    
    // Ensure that the common control DLL is loaded. 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC  = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx((LPINITCOMMONCONTROLSEX)&icex); 
    
    hwndListView = CreateWindow(
WC_LISTVIEW, 
                  "", 
dwStyle,
0, 
0, 
                  400,
                  300,
hwnd, 
(HMENU)1001, 
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), 
NULL); 

解决方案 »

  1.   

    对了忘记说了
    还要问
    在响应消息的时候怎么得到鼠标坐标,或者鼠标点击的 listview控件的 哪行?哪列?
      

  2.   

    这个应该是处理WM_NOTIFY消息,具体的你要去查MSDN了
      

  3.   


    谢谢能具体说下在响应消息的时候怎么得到:鼠标坐标,或者鼠标点击的 listview控件的 哪行?哪列?
      

  4.   

    能具体说下在响应消息的时候怎么得到:鼠标坐标,或者鼠标点击的 listview控件的 哪行?哪列?
    =========
    这个得去查MSDN了,你自己去查下吧,SDK用这个比较麻烦。
      

  5.   

     
    //费了九牛二虎之力终于解决楼主的问题了
    // 44.cpp : Defines the entry point for the application.
    //#include "stdafx.h"
    #include "resource.h"
    #include "commctrl.h"
    #define MAX_LOADSTRING 100// Global Variables:
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text// Foward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
      // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable; // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_MY44, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance); // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
    return FALSE;
    } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MY44); // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    } return msg.wParam;
    }//
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    //  COMMENTS:
    //
    //    This function and its usage is only necessary if you want this code
    //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
    //    function that was added to Windows 95. It is important to call this function
    //    so that the application will get 'well formed' small icons associated
    //    with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY44);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = (LPCSTR)IDC_MY44;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex);
    }//
    //   FUNCTION: InitInstance(HANDLE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;   hInst = hInstance; // Store instance handle in our global variable   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);   if (!hWnd)
       {
          return FALSE;
       }   ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);   return TRUE;
    }//
    //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND - process the application menu
    //  WM_PAINT - Paint the main window
    //  WM_DESTROY - post a quit message and return
    //
    //
    int   GetIndex(HWND   hList)   
    {   
          int   i,   n;   
          n   =   ListView_GetItemCount(hList);   
          for   (i   =   0;   i   <   n;   i++)   
              if   (ListView_GetItemState(hList,   i,   LVIS_FOCUSED)   ==   LVIS_FOCUSED)   
                  return   i;   
     }
    HWND hwndListView=NULL;
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message) 
    {
    case WM_CREATE:
    {
    RECT rcl;  
    INITCOMMONCONTROLSEX icex;
        
      // Ensure that the common control DLL is loaded.  
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx((LPINITCOMMONCONTROLSEX)&icex);  

    hwndListView= CreateWindow("syslistview32","list",
    WS_VISIBLE|WS_CHILD|WS_BORDER| LVS_LIST,0,0,400,300,
    hWnd,  NULL,  NULL,  NULL);
    LVITEM item; 
    item.mask =   LVIF_TEXT; 
    item.iItem =   0; 
    item.iSubItem =   0; 
    item.pszText =   "aaaaaaaaaaa"; 
    ListView_InsertItem(hwndListView,   &item);
    item.iItem++; 
    item.pszText =   "bbbbbbbbb"; 
    ListView_InsertItem(hwndListView,   &item);
    item.iItem++; 
    item.pszText =   "cccccccccccc"; 
    ListView_InsertItem(hwndListView,   &item);
    item.iItem++; 
    item.pszText =   "ddddddddddd"; 
    ListView_InsertItem(hwndListView,   &item);
    break;
    }
    case WM_COMMAND:
    {
    MessageBox(hWnd,"WM_COMMAND","",0);
    wmId    = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 
    // Parse the menu selections:
    switch (wmId)
    {
    case IDM_ABOUT:
       DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
       break;
    case IDM_EXIT:
       DestroyWindow(hWnd);
       break;
    default:
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    // if(wmEvent==NM_CLICK )
    {
    // MessageBox(hWnd,"NM_CLICK","",0);
    }
    }
    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // TODO: Add any drawing code here...
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    case WM_NOTIFY:
    {
    NMHDR * sss =(NMHDR*)lParam;
    if(sss->code==NM_CLICK )
    {
    POINT pt;
    GetCursorPos(&pt);
    TCHAR sz[50];
    wsprintf(sz,"x=%d,y=%d,index=%d",pt.x,pt.y,GetIndex(hwndListView));
    MessageBox(hWnd,sz,"",0);
    }
    break;
    }
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }// Mesage handler for about box.
    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    case WM_INITDIALOG:
    return TRUE; case WM_COMMAND:
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
    {
    EndDialog(hDlg, LOWORD(wParam));
    return TRUE;
    }
    break;
    }
        return FALSE;
    }