Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tab control example needed

305 views
Skip to first unread message

Mike

unread,
Aug 10, 1999, 3:00:00 AM8/10/99
to
Hello,

i am in need of a simple windows API (none MFC) tab control example which
sould be compileable in MSVC++ 6.0.
I hope you can help me and thanks in advance:

MIKE: jus...@magnet.at


고동운

unread,
Aug 11, 1999, 3:00:00 AM8/11/99
to
hello

#include <windows.h>
#include <commctrl.h>
#include "resource.h"

LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);

HWND hMain=NULL;
HINSTANCE hInst;

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASS wc;

hInst=hInstance;

wc.style=CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=(WNDPROC)MainProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName="MENU";
wc.lpszClassName="TabCtrl Example";

if(!RegisterClass(&wc))
return FALSE;

hMain=CreateWindow(
"TabCtrl Example",
"탭 컨트롤 (TabCtrl)",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

if(!hMain)
return FALSE;

ShowWindow(hMain, nCmdShow);
UpdateWindow(hMain);

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (msg.wParam);
}

HWND hTab=NULL;
HWND hStatic=NULL;
HWND hEdit=NULL;

LRESULT CALLBACK MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
lParam)
{
switch(uMsg)
{
// TabCtrl_InsertItem
// 2개의 아이템을 가지고 있는 탭 컨트롤을 만든다
case WM_CREATE:
InitCommonControls();

hTab=CreateWindowEx(0, WC_TABCONTROL, "",
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
5, 5, 500, 300, hWnd, (HMENU)1, hInst, NULL);

hStatic=CreateWindowEx(0, "STATIC", "Static Control",
WS_CHILD | WS_VISIBLE | WS_BORDER,
50, 50, 100, 30, hWnd, (HMENU)2, hInst, NULL);

hEdit=CreateWindowEx(0, "EDIT", "Edit Control",
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL,
50, 100, 400, 150, hWnd, (HMENU)3, hInst, NULL);

if(hTab)
{
TC_ITEM ti;

ti.mask=TCIF_TEXT;
ti.pszText="Item 1";
TabCtrl_InsertItem(hTab, 1, &ti);

ti.pszText="Item 2";
TabCtrl_InsertItem(hTab, 2, &ti);
}

EnableWindow(hEdit, FALSE);

return TRUE;
// break 문으로 끝났음에 유의
case WM_NOTIFY:
switch( ((NMHDR *)lParam)->code )
{
// 키가 눌러졌을때 발생
case TCN_KEYDOWN:
{
TC_KEYDOWN *tk=(TC_KEYDOWN *)lParam;
char buf[100]={0,};

wsprintf(buf, "wVKey [%d]\nflags [%d]\n",
tk->wVKey, tk->flags);
MessageBox(hWnd, buf, "TCN_KEYDOWN", MB_OK);
}
break;
// 선택된 탭이 바뀌면 발생
case TCN_SELCHANGE:
{
int index=(int)LOWORD(wParam);
char buf[100]={0,};

wsprintf(buf, "변경된 탭의 색인 [%d]\n", index);
MessageBox(hWnd, buf, "TCN_SELCHANGE", MB_OK);
}
break;
}
break;

case WM_COMMAND:
switch( LOWORD(wParam) )
{
// TabCtrl_DeleteAllItems
// 모든 아이템을 제거한다
case ID_DELETEALLITEMS:
TabCtrl_DeleteAllItems(hTab);
break;
// TabCtrl_DeleteItem
// 2번째 아이템을 제거한다
case ID_DELETEITEM:
TabCtrl_DeleteItem(hTab, 1);
break;
// TabCtrl_GetCurFocus
// 현재 Focus 를 가지고 있는 탭 컨트롤의 색인을 구한다
case ID_GETCURFOCUS:
{
int nResult=TabCtrl_GetCurFocus(hTab);

char buf[100]={0,};

wsprintf(buf, "Result : %d", nResult);
MessageBox(hWnd, buf, "TabCtrl_GetCurFocus", MB_OK);
}
break;
// TabCtrl_GetCurSel
// 현재 선택된 탭의 색인을 구한다
case ID_GETCURSEL:
{
int nResult=TabCtrl_GetCurSel(hTab);

char buf[100]={0,};

wsprintf(buf, "Result : %d", nResult);
MessageBox(hWnd, buf, "TabCtrl_GetCurSel", MB_OK);
}
break;
// TabCtrl_GetImageList
// 탭 컨트롤과 관련된 이미지 리스트를 구한다
case ID_GETIMAGELIST:
{
HIMAGELIST hImageList=TabCtrl_GetImageList(hTab);

if(!hImageList)
MessageBox(hWnd, "이미지 리스트가 없습니다.",
"TabCtrl_GetImageList", MB_OK);
else
{
char buf[100]={0,};

wsprintf(buf, "탭 컨트롤과 연관된 이미지 리스트: %xh", hImageList);
MessageBox(hWnd, buf, "TabCtrl_GetImageList", MB_OK);
}
}
break;
// TabCtrl_GetItem
// 정보를 구한다
case ID_GETITEM:
{
char buf[100]={0,};
TC_ITEM ti;

ti.mask=TCIF_TEXT;
ti.pszText=buf;
ti.cchTextMax=100;

TabCtrl_GetItem(hTab, 0, &ti);

char temp[200]={0,};
wsprintf(temp, "pszText [%s]\ncchTextMax [%d]\n",
ti.pszText, ti.cchTextMax);
MessageBox(hWnd, temp, "TabCtrl_GetItem", MB_OK);
}
break;
// TabCtrl_GetItemCount
// 탭 컨트롤에서 탭의수를 구한다
case ID_GETITEMCOUNT:
{
int nResult=TabCtrl_GetItemCount(hTab);

char buf[100]={0,};
wsprintf(buf, "Result : %d", nResult);
MessageBox(hWnd, buf, "TabCtrl_GetItemCount", MB_OK);
}
break;
// TabCtrl_GetItemRect
// 사각형의 크기를 구한다
case ID_GETITEMRECT:
{
RECT rect;

TabCtrl_GetItemRect(hTab, 0, &rect);

char buf[100]={0,};
wsprintf(buf, "[%d,%d] -- [%d,%d]",
rect.left, rect.top, rect.right, rect.bottom);
MessageBox(hWnd, buf, "TabCtrl_GetItemRect", MB_OK);
}
break;
// TabCtrl_GetRowCount
// 탭 컨트롤에 있는 탭의 행의 수를 구한다
case ID_GETROWCOUNT:
{
int nResult=TabCtrl_GetRowCount(hTab);

char buf[100]={0,};
wsprintf(buf, "Result : %d", nResult);
MessageBox(hWnd, buf, "TabCtrl_GetRowCount", MB_OK);
}
break;
// TabCtrl_GetToolTips
// 탭 컨트롤과 연관된 툴팁 컨트롤의 핸들을 구한다
case ID_GETTOOLTIPS:
{
HWND hToolTip=TabCtrl_GetToolTips(hTab);

if(!hToolTip)
MessageBox(hWnd, "툴팁 컨트롤이 없습니다.",
"TabCtrl_GetToolTips", MB_OK);
else
{
char buf[100]={0,};

wsprintf(buf, "탭 컨트롤과 연관된 툴팁 컨트롤: %xh", hToolTip);
MessageBox(hWnd, buf, "TabCtrl_GetToolTips", MB_OK);
}
}
break;
// TabCtrl_HitTest
// 5,5 에 있는 대상을 확인
case ID_HITTEST:
{
TC_HITTESTINFO info;

info.pt.x=5; info.pt.y=5;
TabCtrl_HitTest(hTab, &info);

char buf[100]={0,};

wsprintf(buf, "[%d,%d]\nflags [%d]\n",
info.pt.x, info.pt.y, info.flags);

switch(info.flags)
{
case TCHT_NOWHERE:
lstrcat(buf, "TCHT_NOWHERE");
break;
case TCHT_ONITEM:
lstrcat(buf, "TCHT_ONITEM");
break;
case TCHT_ONITEMICON:
lstrcat(buf, "TCHT_ONITEMICON");
break;
case TCHT_ONITEMLABEL:
lstrcat(buf, "TCHT_ONITEMLABEL");
break;
default:
lstrcat(buf, "ERROR");
break;
}

MessageBox(hWnd, buf, "TabCtrl_HitTest", MB_OK);
}
break;
// TabCtrl_InsertItem
// 아이템을 중간에 하나 추가한다
case ID_INSERTITEM:
{
TC_ITEM item;

item.mask=TCIF_TEXT;
item.pszText="Insert Item";

TabCtrl_InsertItem(hTab, 1, &item);
}
break;
// TabCtrl_SetCurSel
// 색인이 1인 페이지를 선택한다
case ID_SETCURSEL:
TabCtrl_SetCurSel(hTab, 1);
break;
// TabCtrl_SetItem
// 색인이 1인 페이지의 속성을 바꾼다
case ID_SETITEM:
{
TC_ITEM item;

item.mask=TCIF_TEXT;
item.pszText="SetItem";

TabCtrl_SetItem(hTab, 1, &item);
}
break;
// TabCtrl_SetItemExtra
// 탭 컨트롤이 탭을 가지지 않을때,
// 추가 데이터의 크기를 100 으로 설정
case ID_SETITEMEXTRA:
if( TabCtrl_SetItemExtra(hTab, 100) )
MessageBox(hWnd, "함수 성공", "TabCtrl_SetItemExtra", MB_OK);
else
MessageBox(hWnd, "함수 실패", "TabCtrl_SetItemExtra", MB_OK);
break;
// TabCtrl_SetItemSize
// 픽셀 단위로 탭의 새로운 폭, 높이를 설정한다
case ID_SETITEMSIZE:
TabCtrl_SetItemSize(hTab, 200, 30);
break;
// TabCtrl_SetPadding
case ID_SETPADDING:
TabCtrl_SetPadding(hTab, 50, 100);
break;
}
return TRUE;

case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
}

return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}

Mike <jus...@magnet.at>이(가) 아래 메시지를
news:7oq5fn$i0l$1...@orudios.magnet.at에 게시하였습니다.

Christian ASTOR

unread,
Aug 11, 1999, 3:00:00 AM8/11/99
to
Take a look at Control Spy, containing excellent samples for every Common
Control...

Mike a écrit :

Mike

unread,
Aug 11, 1999, 3:00:00 AM8/11/99
to
Where can i find "Control Spy ?"

Christian ASTOR schrieb in Nachricht <37B153B0...@alcatel.fr>...

.

Klaus-Werner Konrad

unread,
Aug 11, 1999, 3:00:00 AM8/11/99
to
Hi, Christian,

> Take a look at Control Spy, containing excellent samples for every Common
> Control...
>

What (or where) is Control Spy - I never heared about it ?

> > i am in need of a simple windows API (none MFC) tab control example
which
> > sould be compileable in MSVC++ 6.0.
> > I hope you can help me and thanks in advance:
> >

--
Klaus-Werner Konrad
(ohne pfiffigen Spruch)


parnasse

unread,
Aug 12, 1999, 3:00:00 AM8/12/99
to
Hi!

Mike wrote:
>
> Where can i find "Control Spy ?"

http://www.microsoft.com/msj/0998/code/controlspy.zip

Good bye!

--
My email address is intentionally invalid to foil spammers.
Delete the ".NOSPAM" to get my real email address.
I do this on my own time with my own money.

0 new messages