|
-
November 26th, 2012, 09:47 AM
#9
Re: Paint on a Tabcontrol
Thanks for the help.
I tried to apply the code but I'm doing something wrong, the tabs won't even show up.
Code:
#include <windows.h>
#include <commctrl.h>
#include <iostream>
using namespace std;
#pragma comment(linker, "/subsystem:\"console\" /entry:\"WinMainCRTStartup\"")
#include <gdiplus.h>
using namespace Gdiplus;
#define ID_TAB 113
#define RED RGB(255,0,0)
#define YELLOW RGB(255,255,0)
#define MAGENTA RGB(255,0,255)
#define WHITE RGB(255,255,255)
#define BLUE RGB(0,0,255)
char className[]="TabControl";
HWND hTab;
HINSTANCE hInst;
static DRAWITEMSTRUCT * lpdis;
LRESULT CALLBACK WindowProcedure(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
MSG messages;
WNDCLASSEX wincl;
hInst = hInstance;
wincl.hInstance=hInstance;
wincl.lpszClassName=className;
wincl.lpfnWndProc=WindowProcedure;
wincl.style=0;
wincl.cbSize=sizeof(WNDCLASSEX);
wincl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wincl.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wincl.hCursor=LoadCursor(NULL,IDC_ARROW);
wincl.lpszMenuName=NULL;
wincl.cbClsExtra=0;
wincl.cbWndExtra=0;
wincl.hbrBackground=HBRUSH(COLOR_3DFACE+1);
if(!RegisterClassEx(&wincl))return 0;
HWND windowHandle=CreateWindow(className,"TabControl",
WS_OVERLAPPEDWINDOW,
200,325,480,320,
NULL,NULL,hInstance,NULL);
ShowWindow(windowHandle,SW_SHOW);
while(GetMessage(&messages,NULL,0,0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
};
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hbr;
COLORREF bkColor;
TCITEM tci;
switch(message)
{
case WM_CREATE:
INITCOMMONCONTROLSEX icce;
icce.dwSize=sizeof(INITCOMMONCONTROLSEX);
icce.dwICC=ICC_TAB_CLASSES;
InitCommonControlsEx(&icce);
hTab=CreateWindow(WC_TABCONTROL,"",
WS_CHILD|WS_VISIBLE|TCS_OWNERDRAWFIXED,
6,0,474,320,
hwnd,
(HMENU)ID_TAB,hInst,NULL);
TCITEM Tab0;
Tab0.mask=TCIF_TEXT;
Tab0.pszText="Tab0";
TabCtrl_InsertItem(hTab,0,&Tab0);
TCITEM Tab1;
Tab1.mask=TCIF_TEXT;
Tab1.pszText="Tab1";
TabCtrl_InsertItem(hTab,1,&Tab1);
TCITEM Tab2;
Tab2.mask=TCIF_TEXT;
Tab2.pszText="Tab2";
TabCtrl_InsertItem(hTab,2,&Tab2);
TCITEM Tab3;
Tab3.mask=TCIF_TEXT;
Tab3.pszText="Tab3";
TabCtrl_InsertItem(hTab,3,&Tab3);
TCITEM Tab4;
Tab4.mask=TCIF_TEXT;
Tab4.pszText="Tab4";
TabCtrl_InsertItem(hTab,4,&Tab4);
return 0;
case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT) lParam;
if(hTab == lpdis->hwndItem) // is this the tab control?
{
// which tab? first, second...fifth
switch (lpdis->itemID)
{
case 0:
hbr = CreateSolidBrush (RGB(255,0,0)) ;
bkColor = RED;
break;
case 1:
hbr = CreateSolidBrush (RGB(255,0,0)) ;
bkColor = YELLOW;
break;
case 2:
hbr = CreateSolidBrush (RGB(255,0,0)) ;
bkColor = MAGENTA;
break;
case 3:
hbr = CreateSolidBrush (RGB(255,0,0)) ;
bkColor = WHITE;
break;
case 4:
hbr = CreateSolidBrush (RGB(255,0,255)) ;
bkColor = BLUE;
break;
}
tci.mask = TCIF_TEXT;
tci.pszText = "Hello";
tci.cchTextMax = 5;
TabCtrl_GetItem(hTab, lpdis->itemID, &tci);
FillRect(lpdis->hDC, &lpdis->rcItem, hbr);
SetBkColor(lpdis->hDC, bkColor);
TextOut(lpdis->hDC,
lpdis->rcItem.left,
lpdis->rcItem.top,
tci.pszText,
lstrlen(tci.pszText));
}
return TRUE;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
};
return 0;
}
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|