M
Danke! Mit der zusätzlichen Angabe von TCIF_PARAM in TCITEM::mask funktioniert das perfekt!
Falls das jemandem nochmal helfen sollte, hier die ganze Klasse:
CTabControl.h
#include <windows.h>
#include <commctrl.h>
class CTabControl
{
private:
TCITEM TabItem;
public:
HWND hWnd;
int ActiveTab;
CTabControl(void);
bool Create(HINSTANCE hInstance,DWORD dwStyle,HWND Parent);
void Move(int x,int y,int width,int height);
void Insert(int Index,char *Text);
bool TabExists(int Index);
int GetActiveTab(void);
bool Delete(int Index);
};
CTabControl.cpp
#include "CTabControl.h"
CTabControl::CTabControl()
{
memset(&TabItem,0,sizeof(TCITEM));
hWnd = NULL;
ActiveTab = -1;
}
bool CTabControl::Create(HINSTANCE hInstance,DWORD dwStyle,HWND Parent)
{
hWnd = CreateWindow(WC_TABCONTROL,NULL,dwStyle,0,0,0,0,Parent,NULL,hInstance,NULL);
if (hWnd == NULL) return false;
return true;
}
void CTabControl::Move(int x,int y,int width,int height)
{
MoveWindow(hWnd,x,y,width,height,true);
}
void CTabControl::Insert(int Index,char *Text)
{
TabItem.mask = TCIF_PARAM|TCIF_TEXT;
TabItem.lParam = Index;
TabItem.pszText = Text;
TabCtrl_InsertItem(hWnd,TabCtrl_GetItemCount(hWnd),&TabItem);
}
bool CTabControl::TabExists(int Index)
{
for (int i = 0; i < TabCtrl_GetItemCount(hWnd); i++)
{
TabCtrl_GetItem(hWnd,i,&TabItem);
if (TabItem.lParam == Index) return true;
}
return false;
}
int CTabControl::GetActiveTab()
{
ActiveTab = TabCtrl_GetCurSel(hWnd);
return ActiveTab;
}
bool CTabControl::Delete(int Index)
{
for (int i = 0; i < TabCtrl_GetItemCount(hWnd); i++)
{
TabCtrl_GetItem(hWnd,i,&TabItem);
if (TabItem.lParam == Index) return TabCtrl_DeleteItem(hWnd,i);
}
return false;
}
Der Parameter Index steht immer für den absoluten Index.
Vielen Dank nochmal!
lg Max