000
25.08.2004, 12:22 Uhr
~hardixy
Gast
|
Hi, habe nach ewigem Suchen ein kleines Hilfsskript gefunden, welches die Implementierung von TabControls ohne MFC unter Visual C erklärt. Habe dieses versucht nachzubauen, jedoch bekomme ich keine Karteikarten auf meinem Screen angezeigt. Bitte um schnelle Hilfe, ist sicher nur ein kleiner dummer Fehler meinerseits. Der Inhalt der Karteikarten ist mir im Augenblick egal, hauptsache ich kann überhaupt erstmal was sehen im Fenster.
So nun ran ans Werk ihr großen Helferlein. Bitte beeilt euch!!!! Schöne Grüße. hardixy
Hier mein Programm:
C++: |
#include <windows.h> #include <commctrl.h>
#define ID_TAB 5001 #define ID_ABSREL 5002 #define ID_LINE 5003
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK GoToProc(HWND, UINT, WPARAM, LPARAM); void MySizeDialog(HWND, HWND);
const char szChildName[] = "Farbtabelle"; const UINT PM_COLORCHANGED = WM_APP + 1; int iLine; // receives line number BOOL fRelative; // receives check box status HWND htab;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; HWND hWnd; WNDCLASS wc; char szAppName[] = "Das Child Window"; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = szAppName; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); hWnd = CreateWindow( szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static RECT rect; HWND hdlg; switch (message) { case WM_CREATE: { GetClientRect(hWnd, &rect); htab = CreateWindow(WC_TABCONTROL,"", WS_CHILD| WS_VISIBLE|WS_BORDER| ES_LEFT, 0, 0, rect.right, rect.bottom, hWnd,(HMENU) ID_TAB, ((LPCREATESTRUCT) lParam)->hInstance, NULL);
TC_ITEM item; // to use an image set this to TCIF_IMAGE item.mask= TCIF_TEXT; // index into tabs image list, set to -1 when not in use item.iImage = -1; item.pszText ="Tab 1"; TabCtrl_InsertItem(htab, 0,&item); item.pszText ="Tab 2"; TabCtrl_InsertItem(htab, 1, &item);
return 0; } case WM_SIZE: { MySizeDialog(hWnd, hdlg); return 0; }
case WM_DESTROY: { PostQuitMessage(0); return 0; }
case WM_NOTIFY: { NMHDR FAR *tem=(NMHDR FAR *)lParam; if (tem->code== TCN_SELCHANGE) { int num=TabCtrl_GetCurSel(tem->hwndFrom); switch(num) { case 0: hdlg = CreateDialog(((LPCREATESTRUCT) lParam) ->hInstance, "Dialog1", htab, GoToProc); MySizeDialog(hWnd, hdlg); break; case 1: hdlg = CreateDialog(((LPCREATESTRUCT) lParam) ->hInstance, "Dialog2", htab, GoToProc); MySizeDialog(hWnd, hdlg); break; } } } } return DefWindowProc(hWnd, message, wParam, lParam); }
void MySizeDialog(HWND hwnd, HWND hdlg) { static RECT rect; GetClientRect(hwnd, &rect); TabCtrl_AdjustRect(htab, FALSE, &rect); MoveWindow(hdlg, rect.left, rect.top, rect.right-rect. left, rect.bottom- rect.top, TRUE); ShowWindow(htab, true); ShowWindow(hwnd, true); }
BOOL CALLBACK GoToProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL fError; switch (message) { case WM_INITDIALOG: CheckDlgButton(hwndDlg, ID_ABSREL, fRelative); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) {
case IDOK: fRelative = IsDlgButtonChecked(hwndDlg, ID_ABSREL); iLine = GetDlgItemInt(hwndDlg, ID_LINE, &fError, fRelative); if (fError) { //MessageBox(hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK); SendDlgItemMessage(hwndDlg, ID_LINE, EM_SETSEL, 0, -1L);
} else return TRUE; case IDCANCEL: DestroyWindow(hwndDlg); //hwndGoto = NULL; return TRUE; } } return FALSE; }
|
Bearbeitung: |
cpp Tags gesetzt
|
Dieser Post wurde am 25.08.2004 um 12:30 Uhr von mike editiert. |