Witam!
Ostatnio zmuszony przez życie zacząłem ogarniać WinAPI i jak to zwykle bywa napotkałem kilka problemów.
- Zaznaczanie elementu w ListView. Mój ListView składa się z 3 kolumn: Nazwy, Daty modyfikacji, Rozmiaru, żeby zaznaczyć całą linie użyłem LVS_EX_FULLROWSELECT. Generalnie chce żeby zaznaczony element został podświetlony (domyślnie na niebiesko), bo w tej chwili nic takiego się nie dzieje.
//Metoda tworząca mojego ListView
HWND CreateListView(HINSTANCE hInstance, HWND hWnd, POINT uPoint, SIZE uSize, UINT uId)
{
HWND hList = CreateWindowEx(
WS_EX_CLIENTEDGE,
WC_LISTVIEW,
TEXT("ListView"),
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_EDITLABELS,
uPoint.x, uPoint.y,
uSize.cx, uSize.cy,
hWnd,
(HMENU)uId,
hInstance,
NULL);
ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT);
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
AddColumnToListView(hList, 0, 300, TEXT("Name"), lvc);
AddColumnToListView(hList, 1, 100, TEXT("Size:"), lvc);
AddColumnToListView(hList, 2, 80, TEXT("Date"), lvc);
UpdateLstView(hList, _driveInfo.path);
return hList;
}
//Metoda obsługująca WM_NOTIFY, gdzie chcę oprogramować kilka zdarzeń.
void NotifyProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hLeftListView = GetDlgItem(hWnd, ID_LEFTLISTVIEW), hStatic;
LPNMITEMACTIVATE lpnmItem = (LPNMITEMACTIVATE)lParam;
wchar_t* bufText = new wchar_t[256];
if ((((LPNMHDR)lParam)->hwndFrom) == hLeftListView)
{
switch (((LPNMHDR)lParam)->code)
{
case NM_CLICK:
// Selection item
//MessageBox(NULL, bufText, TEXT("Error"), MB_OK | MB_ICONERROR);
break;
case NM_RCLICK:
// Open context menu
break;
case NM_DBLCLK:
// Open or run file
break;
default:
break;
}
}
}
- Chciałbym się dowiedzieć czy istnieje sposób aby pobrać danego pliku, lub folderu ikonkę tak aby w wierszu ListView było widać ikonkę obok nazwy?
- Wysyłanie tekstu do statica. Wiem że jest to banalne ale prawda jest taka że po utworzeniu kontrolki static za żadne skarby nie mogę ustawić/zmienić tekstu. Próbowałem debugować to wyskakuje komunikat, że hStatic równa się unused i nie wiem o co mu chodzi. Co do ustawiania tekstu to próbowałem SetWindowText, Static_SetText, SendMessage itp.
HWND hStatic = CreateWindowEx(
WS_EX_CLIENTEDGE,
WC_STATIC,
TEXT("DUPA"),
WS_CHILD | WS_VISIBLE | SS_LEFT | SS_WHITEFRAME,
uPoint.x, uPoint.y,
uSize.cx, uSize.cy,
hWnd,
(HMENU)uId,
hInstance,
NULL);
Nie wiem czy dobrze robię ale generalnie wszystkie kontrolki tworzę w WM_CREATE.