CListCtrl und LVS_EX_FULLROWSELECT



  • Hi, wenn Ich den style LVS_EX_FULLROWSELECT setze passiert nichts? Es wird nur das eine sub Item und nicht die ganze Reihe markiert?

    MfG!



  • Code zum Reproduzieren ist wo?



  • 
    // C++ MFC DialogDlg.cpp : implementation file
    //
    
    #include "pch.h"
    #include "framework.h"
    #include "C++ MFC Dialog.h"
    #include "C++ MFC DialogDlg.h"
    #include "afxdialogex.h"
    #include "resource.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CCMFCDialogDlg dialog
    
    
    
    CCMFCDialogDlg::CCMFCDialogDlg(CWnd* pParent /*=nullptr*/)
        : CDialogEx(IDD_C_MFC_DIALOG_DIALOG, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CCMFCDialogDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_LIST, ListCtrl);
    }
    
    BEGIN_MESSAGE_MAP(CCMFCDialogDlg, CDialogEx)
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CCMFCDialogDlg message handlers
    
    BOOL CCMFCDialogDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);            // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
    
        ListCtrl.InsertColumn(0, L"ID",      LVCFMT_LEFT,   100);
        ListCtrl.InsertColumn(1, L"Name",    LVCFMT_CENTER,  80);
        ListCtrl.InsertColumn(2, L"Age",     LVCFMT_LEFT,   100);
        ListCtrl.InsertColumn(3, L"Address", LVCFMT_LEFT,    80);
    
        ListCtrl.InsertItem (0, L"1");
        ListCtrl.SetItemText(0, 1, L"Mark");
        ListCtrl.SetItemText(0, 2, L"45");
        ListCtrl.SetItemText(0, 3, L"Address 1");
    
        ListCtrl.InsertItem (1, L"2");
        ListCtrl.SetItemText(1, 1, L"Allan");
        ListCtrl.SetItemText(1, 2, L"29");
        ListCtrl.SetItemText(1, 3, L"Address 2");
    
        ListCtrl.InsertItem (2, L"3");
        ListCtrl.SetItemText(2, 1, L"Ajay");
        ListCtrl.SetItemText(2, 2, L"37");
        ListCtrl.SetItemText(2, 3, L"Address 3");
    
        ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CCMFCDialogDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // Center icon in client rectangle
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CCMFCDialogDlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    

    funktioniert toll.



  • Oder könnte es sein, dass der Stil bei CreateWindowEx als erster Parameter angegeben wurde?
    Das funktioniert im Ggs. zu LVS_REPORT, LVS_ICON etc. nicht über den Fensterstil. Mit der WinApi direkt wäre die Nachricht LVM_SETEXTENDEDLISTVIEWSTYLE oder das Makro ListView_SetExtendedListViewStyle.



  • @yahendrik MFC-Forum.



  • @Swordfish sagte in CListCtrl und LVS_EX_FULLROWSELECT:

    @yahendrik MFC-Forum.

    Schon klar, es wäre aber nicht das erste Mal, dass WinApi-Fragen hierher gelangen. Die MFC-Lösung hast du ja genannt.



  • ctl->SetExtendedStyle(LVS_EX_FULLROWSELECT);

    Hat bei mir keinen Effekt? Früher bei winapi ging's und jetzt bei MFC nicht mehr?

    ctl ist bei mir von CListCtrl abgeleitet für custom draw.



  • Du zeigen komplette Kot.
    Warum ctl Pointer?

    @Mike85Dev sagte in CListCtrl und LVS_EX_FULLROWSELECT:

    ctl ist bei mir von CListCtrl abgeleitet für custom draw.

    Für Custom Draw brauchst nicht ableiten.
    Neat Stuff to Do in List Controls Using Custom Draw



  • Macht das einen Unterschied ob dynamisch oder statisch erstellt?

    CMyListCtrl *ctl = new CMyListCtrl;
    Oder
    CMyListCtrl ctl;

    Was ist besser?



  • ich bin hier raus.


Anmelden zum Antworten