GIDForums  

Go Back   GIDForums > Computer Programming Forums > C++ Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 06-Feb-2005, 02:10
Dr. Evil Dr. Evil is offline
Member
 
Join Date: Oct 2004
Location: Netherlands
Posts: 120
Dr. Evil will become famous soon enough

Problems with Tabs


Sorry to bother you all again, but I've seem to hit a brick wall while experimenting with tabs. This should work, but I can't, for the life of me, figure out why it dosn't. Any help would be much appriciated.

CPP / C++ / C Code:
#include <windows.h>
#include <commctrl.h>

#pragma comment(lib, "C:\Borland\BCC55\Lib\PSDK\comctl32.lib")

#define ID_MAIN_TAB 101
#define ID_MAIN_EDIT 102
#define TAB_NUM 10
#define ErrMsBox(x,y) MessageBox(x, y, "Error", MB_OK | MB_ICONEXCLAMATION)
#define AltMsBox(x,y) MessageBox(x, y, "Alert", MB_OK | MB_ICONINFORMATION)
#define GET_X_LPARAM(pt) (short)(LOWORD(pt))
#define GET_Y_LPARAM(pt) (short)(HIWORD(pt))

typedef struct
{
	 TCITEMHEADER tcih;
	 LPSTR text;
} TAB_INFO;

int CreateWindows(HWND winhandle)
{
	HWND tabhandle, edithandle;
	RECT rc;
	TAB_INFO itab;
	int i, len;
	HFONT fonttype;
	
	InitCommonControls();
	GetClientRect(winhandle, &rc);
	fonttype = GetStockObject(DEFAULT_GUI_FONT);
	
	tabhandle = CreateWindow(WC_TABCONTROL, "", 
		WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 
		0, 0, rc.right, rc.bottom, 
		winhandle, (HMENU)ID_MAIN_TAB, 
		GetModuleHandle(NULL), NULL);
	if(tabhandle == NULL) return 1;
	edithandle = CreateWindow("EDIT", "", 
		WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 
		0, 0, 100, 100, 
		winhandle, (HMENU)ID_MAIN_EDIT, 
		GetModuleHandle(NULL), NULL);
	if(edithandle == NULL) return 2;
	
	itab.tcih.mask = TCIF_TEXT | TCIF_IMAGE;
	itab.tcih.iImage = -1;
	itab.tcih.pszText = "Tab0";
	len = strlen(itab.tcih.pszText);
	len--;
	
	for(i=0; i<TAB_NUM; i++)
	{
		if(TabCtrl_InsertItem(tabhandle, i, &itab) == -1) return 0;
		itab.tcih.pszText[len]++;
		itab.tcih.pszText[len] %= ('9' + 1);
	}
	
	SendMessage(edithandle, WM_SETFONT, (WPARAM)fonttype, 0);
	SendMessage(tabhandle, WM_SETFONT, (WPARAM)fonttype, 0);
	
	return 0;
}

int SaveTabInfo(HWND winhandle)
{
	HWND tabhandle, edithandle;
	TAB_INFO itab;
	DWORD len;
	int i, pge;
	
	ZeroMemory(&itab, sizeof(itab));
	tabhandle = GetDlgItem(winhandle, ID_MAIN_TAB);
	edithandle = GetDlgItem(winhandle, ID_MAIN_EDIT);
	pge = (int)SendMessage(tabhandle, TCM_GETCURSEL, 0, 0);
	len = GetWindowTextLength(edithandle);
	
	if(len > 0)
	{
		itab.text = GlobalAlloc(GPTR, len+1);
		if(itab.text == NULL) return 1;
		GetWindowText(edithandle, itab.text, len+1);
		TabCtrl_SetItem(tabhandle, pge, &itab);
		GlobalFree(itab.text);
	}
	else
	{
		itab.text = "";
		TabCtrl_SetItem(tabhandle, pge, &itab);
	}
	SetWindowText(edithandle, "");
	
	return 0;
}

int SwitchTabInfo(HWND winhandle)
{
	HWND tabhandle, edithandle;
	TAB_INFO itab;
	int pge;
	
	ZeroMemory(&itab, sizeof(itab));
	tabhandle = GetDlgItem(winhandle, ID_MAIN_TAB);
	edithandle = GetDlgItem(winhandle, ID_MAIN_EDIT);
	pge = (int)SendMessage(tabhandle, TCM_GETCURSEL, 0, 0);
	
	TabCtrl_GetItem(tabhandle, pge, &itab);
	SetWindowText(edithandle, itab.text);
	
	return 0;
}

int SizeWindows(HWND winhandle, LPARAM lParam)
{
	HWND tabhandle, edithandle;
	HDWP hdp;
	RECT rc;
	
	tabhandle = GetDlgItem(winhandle, ID_MAIN_TAB);
	edithandle = GetDlgItem(winhandle, ID_MAIN_EDIT);
	SetRect(&rc, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
	TabCtrl_AdjustRect(tabhandle, FALSE, &rc);
	
	hdp = BeginDeferWindowPos(2);
	DeferWindowPos(hdp, tabhandle, NULL, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), SWP_NOMOVE | SWP_NOZORDER);
	DeferWindowPos(hdp, edithandle, HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0);
	EndDeferWindowPos(hdp);
	
	return 0;
}

LRESULT CALLBACK MainWndProc(HWND winhandle, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_CREATE:
			if(CreateWindows(winhandle) != 0) ErrMsBox(winhandle, "Unable to create all windows");
			break;
		case WM_SIZE:
			SizeWindows(winhandle, lParam);
			break;
		case WM_NOTIFY:
		{
			NMHDR *pnmh = (NMHDR*)lParam;
			if(pnmh->code == TCN_SELCHANGING)
			{
				if(SaveTabInfo(winhandle) != 0)
				{
					ErrMsBox(winhandle, "An error occured whilst saving tab text");
					return TRUE; //Stop tab from changing
				}
			}
			else if(pnmh->code == TCN_SELCHANGE) SwitchTabInfo(winhandle);
		}
		break;
		case WM_CLOSE: DestroyWindow(winhandle); break;
		case WM_DESTROY: PostQuitMessage(0); break;
		default: return DefWindowProc(winhandle, message, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hint, HINSTANCE hpint, LPSTR lpCmdLine, int nCmdShow)
{
	WNDCLASSEX wc;
	HWND winhandle;
	MSG Message;
	const char classname[] = "TabberClass1";

	wc.cbSize					= sizeof(WNDCLASSEX);
	wc.style					= 0;
	wc.lpfnWndProc				= MainWndProc; /*whatever the procedure function is*/
	wc.cbClsExtra				= 0;
	wc.cbWndExtra				= 0;
	wc.hInstance				= hint; /*whatever HINSTANCE variable is*/
	wc.hIcon					= LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor					= LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground			= (HBRUSH) (COLOR_WINDOW+1);
	wc.lpszMenuName				= NULL;
	wc.lpszClassName			= classname; /*variable to identify class*/
	wc.hIconSm					= LoadIcon(NULL, IDI_APPLICATION);

	if(!RegisterClassEx(&wc)) {ErrMsBox(NULL, "An error occured whilst registering the window class"); return 0;}

	winhandle = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		classname,
		"Tabber",
		WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS,
		CW_USEDEFAULT, CW_USEDEFAULT, 500, 400,
		NULL, NULL, hint, NULL);

	if(winhandle == NULL) {ErrMsBox(NULL, "An error occured whilst creating the windows"); return 0;}

	ShowWindow(winhandle, nCmdShow);
	UpdateWindow(winhandle);

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

	return Message.wParam;
}

EDIT: I just remembered yet another question that was bothering me... Recently, I've made a few smallish, mostly useless, programs that include a dialog box, which is, obviously, a resource. Now, it works fine on my computer, running WinXP Home, but when I try to take them to school, running XP Professional, some of the programs using dialogs don't even start. Or, when they do, start acting erratic and don't do what they're supposed to. Is this because of my compiler, my resource compiler, my pathetic coding skills, or some other reason which I have yet to know about?
  #2  
Old 06-Feb-2005, 19:49
davekw7x davekw7x is offline
Outstanding Member
 
Join Date: Feb 2004
Location: Left Coast, USA
Posts: 5,303
davekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to behold
Quote:
Originally Posted by Dr. Evil
Sorry to bother you all again, but I've seem to hit a brick wall while experimenting with tabs. This should work, but I can't, for the life of me, figure out why it dosn't. Any help would be much appriciated.

Important disclaimer: I'm not a Windows programmer, but I thought your problem was an interesting opportunity for me to learn a little about tab controls. It looks like you have done the heavy lifting; I just tweaked your SaveTabInfo and SwitchTabInfo a little.

The main thing is, if I am reading MSDN correctly: you should set the mask bit for TCIF_PARAM in order to get the text pointer when calling TabCtrl_GetItem() and TabCtrl_SetItem(). I also cleaned up the GlobalAlloc-GlobalFree sequence, I think --- check it carefully, in case I missed something. Anyhow, here are the routines that I changed.

(Note the change in CreateWindows: I use sprintf() to format the tab text, and that requires you to include <stdio.h> at the beginning. This method is cleaner than your overwriting characters in the string literal --- technically a no-no, although this version of Borland seems to work with it.)

CPP / C++ / C Code:

#include <stdio.h> /* for sprintf in CreateWiundows() */

/*
 */
int CreateWindows(HWND winhandle)
{
  HWND tabhandle, edithandle;
  RECT rc;
  TAB_INFO itab;
  int i;
  HFONT fonttype;
  
  InitCommonControls();
  GetClientRect(winhandle, &rc);
  fonttype = GetStockObject(DEFAULT_GUI_FONT);
  
  tabhandle = CreateWindow(WC_TABCONTROL, "", 
    WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 
    0, 0, rc.right, rc.bottom, 
    winhandle, (HMENU)ID_MAIN_TAB, 
    GetModuleHandle(NULL), NULL);
  if(tabhandle == NULL) return 1;
  edithandle = CreateWindow("EDIT", "", 
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 
    0, 0, 100, 100, 
    winhandle, (HMENU)ID_MAIN_EDIT, 
    GetModuleHandle(NULL), NULL);
  if(edithandle == NULL) return 2;
  

  itab.tcih.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
  itab.tcih.iImage = -1;

  for(i=0; i<TAB_NUM; i++) {
    char asc[10];
    sprintf(asc, "Tab%d", i); /* format the tab text */
    itab.tcih.pszText = asc;
    itab.text = 0; /* null pointer initially */

    if(TabCtrl_InsertItem(tabhandle, i, &itab) == -1) {
      return 3;
    }
  }

  
  SendMessage(edithandle, WM_SETFONT, (WPARAM)fonttype, 0);
  SendMessage(tabhandle, WM_SETFONT, (WPARAM)fonttype, 0);
  
  return 0;
}

int SaveTabInfo(HWND winhandle)
{
  HWND tabhandle, edithandle;
  TAB_INFO itab;
  DWORD len;
  int i, pge;
  
  itab.tcih.mask = TCIF_PARAM; /* that's all we are interested in here */

  TabCtrl_GetItem(tabhandle, pge, &itab);
  tabhandle = GetDlgItem(winhandle, ID_MAIN_TAB);
  edithandle = GetDlgItem(winhandle, ID_MAIN_EDIT);
  pge = (int)SendMessage(tabhandle, TCM_GETCURSEL, 0, 0);
  len = GetWindowTextLength(edithandle);

  if (itab.text) { /* old stuff was saved --- free the memory */
    GlobalFree(itab.text);
  }
  
  if(len > 0) { /* have some stuff to save */
    itab.text = GlobalAlloc(GPTR, len+1);
    if(itab.text == NULL) {
      return 1;
    }
    GetWindowText(edithandle, itab.text, len+1);
  }
  else { /* nothing to save */
    itab.text = 0;
  }
  TabCtrl_SetItem(tabhandle, pge, &itab);
  
  return 0;
}

int SwitchTabInfo(HWND winhandle)
{
  HWND tabhandle, edithandle;
  TAB_INFO itab;
  int pge;
  
  tabhandle = GetDlgItem(winhandle, ID_MAIN_TAB);
  edithandle = GetDlgItem(winhandle, ID_MAIN_EDIT);
  pge = (int)SendMessage(tabhandle, TCM_GETCURSEL, 0, 0);
  
  itab.tcih.mask = TCIF_PARAM;
  TabCtrl_GetItem(tabhandle, pge, &itab);
  if (itab.text) {
    SetWindowText(edithandle, itab.text);
  }
  else {
    SetWindowText(edithandle, "");
  }
  
  return 0;
}


If I have made any errors or bad assumptions (great or small) I trust that someone will set me straight. In the meanwhile, it seems to be working.

Regards,

Dave
  #3  
Old 07-Feb-2005, 10:01
Dr. Evil Dr. Evil is offline
Member
 
Join Date: Oct 2004
Location: Netherlands
Posts: 120
Dr. Evil will become famous soon enough
Ah, that last GlobalFree() and that other flag were the problems, thank you for correcting me on those, it works perfectly now. You had a small bug in the saving function, though, in which you used TabCtrl_GetItem() before initiating any of the variables, I also added in a little loop at the end to free all the allocated memory. So, here's the code, if you want to see the complete working version.

CPP / C++ / C Code:
#include <windows.h>
#include <commctrl.h>

#pragma comment(lib, "C:\Borland\BCC55\Lib\PSDK\comctl32.lib")

#define ID_MAIN_TAB 101
#define ID_MAIN_EDIT 102
#define TAB_NUM 10

#define ErrMsBox(x,y) MessageBox(x, y, "Error", MB_OK | MB_ICONEXCLAMATION)
#define AltMsBox(x,y) MessageBox(x, y, "Alert", MB_OK | MB_ICONINFORMATION)
#define GET_X_LPARAM(pt) (short)(LOWORD(pt))
#define GET_Y_LPARAM(pt) (short)(HIWORD(pt))

typedef struct
{
	 TCITEMHEADER tcih;
	 LPSTR text;
} TAB_INFO;

int CreateWindows(HWND winh)
{
	HWND tabh, edith;
	RECT rc;
	TAB_INFO itab;
	int i, len;
	HFONT fonttype;
	
	InitCommonControls();
	GetClientRect(winh, &rc);
	fonttype = GetStockObject(DEFAULT_GUI_FONT);
	
	tabh = CreateWindow(WC_TABCONTROL, "", 
		WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 
		0, 0, rc.right, rc.bottom, 
		winh, (HMENU)ID_MAIN_TAB, 
		GetModuleHandle(NULL), NULL);
	if(tabh == NULL) return 1;
	edith = CreateWindow("EDIT", "", 
		WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 
		0, 0, 100, 100, 
		winh, (HMENU)ID_MAIN_EDIT, 
		GetModuleHandle(NULL), NULL);
	if(edith == NULL) return 2;
	
	itab.tcih.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
	itab.tcih.iImage = -1;
	itab.tcih.pszText = "Tab0";
	len = strlen(itab.tcih.pszText);
	len--;
	
	for(i=0; i<TAB_NUM; i++)
	{
		itab.text = 0;
		
		if(TabCtrl_InsertItem(tabh, i, &itab) == -1) return 3;
		
		itab.tcih.pszText[len]++;
		if(itab.tcih.pszText[len] > '9') itab.tcih.pszText[len] = '0';
	}
	
	SendMessage(edith, WM_SETFONT, (WPARAM)fonttype, 0);
	SendMessage(tabh, WM_SETFONT, (WPARAM)fonttype, 0);
	
	return 0;
}

int SaveTabInfo(HWND winh)
{
	HWND tabh, edith;
	TAB_INFO itab;
	DWORD len;
	int i, pge;
	
	ZeroMemory(&itab, sizeof(itab));
	tabh = GetDlgItem(winh, ID_MAIN_TAB);
	edith = GetDlgItem(winh, ID_MAIN_EDIT);
	pge = (int)SendMessage(tabh, TCM_GETCURSEL, 0, 0);
	len = GetWindowTextLength(edith);
	itab.tcih.mask = TCIF_PARAM;
	
	TabCtrl_GetItem(tabh, pge, &itab);
	if(itab.text) GlobalFree(itab.text);
	
	if(len > 0)
	{
		itab.text = GlobalAlloc(GPTR, len+1);
		if(itab.text == NULL) return 1;
		GetWindowText(edith, itab.text, len+1);
	}
	else itab.text = 0;
	
	TabCtrl_SetItem(tabh, pge, &itab);
	SetWindowText(edith, "");
	
	return 0;
}

int SwitchTabInfo(HWND winh)
{
	HWND tabh, edith;
	TAB_INFO itab;
	int pge;
	
	ZeroMemory(&itab, sizeof(itab));
	tabh = GetDlgItem(winh, ID_MAIN_TAB);
	edith = GetDlgItem(winh, ID_MAIN_EDIT);
	pge = (int)SendMessage(tabh, TCM_GETCURSEL, 0, 0);
	itab.tcih.mask = TCIF_PARAM;
	
	TabCtrl_GetItem(tabh, pge, &itab);
	SetWindowText(edith, itab.text);
	
	return 0;
}

int SizeWindows(HWND winh, LPARAM lParam)
{
	HWND tabh, edith;
	HDWP hdp;
	RECT rc;
	
	tabh = GetDlgItem(winh, ID_MAIN_TAB);
	edith = GetDlgItem(winh, ID_MAIN_EDIT);
	SetRect(&rc, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
	TabCtrl_AdjustRect(tabh, FALSE, &rc);
	
	hdp = BeginDeferWindowPos(2);
	DeferWindowPos(hdp, tabh, NULL, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), SWP_NOMOVE | SWP_NOZORDER);
	DeferWindowPos(hdp, edith, HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0);
	EndDeferWindowPos(hdp);
	
	return 0;
}

LRESULT CALLBACK MainWndProc(HWND winh, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_CREATE:
			if(CreateWindows(winh) != 0) ErrMsBox(winh, "Unable to create all windows");
			break;
		case WM_SIZE:
			SizeWindows(winh, lParam);
			break;
		case WM_NOTIFY:
		{
			NMHDR *pnmh = (NMHDR*)lParam;
			if(pnmh->code == TCN_SELCHANGING)
			{
				if(SaveTabInfo(winh) != 0)
				{
					ErrMsBox(winh, "An error occured whilst saving tab text");
					return TRUE; //Stop tab from changing
				}
			}
			else if(pnmh->code == TCN_SELCHANGE) SwitchTabInfo(winh);
		}
		break;
		case WM_CLOSE: DestroyWindow(winh); break;
		case WM_DESTROY: 
		{
			TAB_INFO itab;
			HWND tabh;
			int i;
			
			for(i=0; i<TAB_NUM; i++)
			{
				itab.tcih.mask = TCIF_PARAM;
				TabCtrl_GetItem(tabh, i, &itab);
				if(itab.text) GlobalFree(itab.text);
			}
			
			PostQuitMessage(0);
		}
		break;
		default: return DefWindowProc(winh, message, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hint, HINSTANCE hpint, LPSTR lpCmdLine, int nCmdShow)
{
	WNDCLASSEX wc;
	HWND winh;
	MSG Message;
	const char classname[] = "TabberClass1";
	
	wc.cbSize					= sizeof(WNDCLASSEX);
	wc.style					= 0;
	wc.lpfnWndProc				= MainWndProc; /*whatever the procedure function is*/
	wc.cbClsExtra				= 0;
	wc.cbWndExtra				= 0;
	wc.hInstance				= hint; /*whatever HINSTANCE variable is*/
	wc.hIcon					= LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor					= LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground			= (HBRUSH) (COLOR_WINDOW+1);
	wc.lpszMenuName				= NULL;
	wc.lpszClassName			= classname; /*variable to identify class*/
	wc.hIconSm					= LoadIcon(NULL, IDI_APPLICATION);
	
	if(!RegisterClassEx(&wc)) {ErrMsBox(NULL, "An error occured whilst registering the window class"); return 0;}
	
	winh = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		classname,
		"Tabber",
		WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS,
		CW_USEDEFAULT, CW_USEDEFAULT, 500, 400,
		NULL, NULL, hint, NULL);
	
	if(winh == NULL) {ErrMsBox(NULL, "An error occured whilst creating the windows"); return 0;}
	
	ShowWindow(winh, nCmdShow);
	UpdateWindow(winh);
	
	while(GetMessage(&Message, NULL, 0, 0) > 0)
	{
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	
	return Message.wParam;
}
  #4  
Old 07-Feb-2005, 10:58
davekw7x davekw7x is offline
Outstanding Member
 
Join Date: Feb 2004
Location: Left Coast, USA
Posts: 5,303
davekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to behold
Quote:
Originally Posted by Dr. Evil
Ah, that last GlobalFree() and that other flag were the problems, thank you for correcting me on those, it works perfectly now. You had a small bug in the saving function, though, in which you used TabCtrl_GetItem() before initiating any of the variables, I also added in a little loop at the end to free all the allocated memory. So, here's the code, if you want to see the complete working version.

Ahhh, yes! I appreciate the corrections.

I don't know how that GetItem() snuck ahead of the other stuff. Sometimes these things have a mind of their own.

I wasn't sure about a final GlobalFree. I know that everything obtained by malloc() must be be free()ed; didn't know about the Windows equivalents.

Thanks for the information and example. Nice.

Regards,

Dave
 
 

Recent GIDBlogProblems with the Navy (Chiefs) by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
cd burner problems ringmaster Computer Hardware Forum 7 25-Jul-2006 03:34
Error C2146: syntax error : missing ',' before identifier 'C4' mattchew008 C++ Forum 2 19-Dec-2004 07:06
Q: selecting a deactivated TAB? (+more on tabs) Marius Giurgi FLTK Forum 4 23-Nov-2004 13:03
Geforce fx 5600 problems SyLuM Computer Hardware Forum 0 08-Aug-2004 21:41
Chaintech Geforce 5600 FX problems bartster74 Computer Hardware Forum 8 04-May-2004 14:16

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 08:01.


vBulletin, Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.