Ejemplo n.º 1
0
bool RemoveTab(HWND TabWindow, int Index)
{
	assert(IsWindow(TabWindow));
	assert(Index >= 0);
	assert(Index < TabCtrl_GetItemCount(TabWindow));

	TC_ITEM TabData;
	TabData.mask = TCIF_IMAGE | TCIF_PARAM;

	if(TabCtrl_GetItem(TabWindow, Index, &TabData))
	{
		int CurIndex = TabCtrl_GetCurSel(TabWindow);
		assert(CurIndex >= -1);
		if(CurIndex != -1 && TabCtrl_DeleteItem(TabWindow, Index))
		{
			if(TabData.iImage != -1)
				TabCtrl_RemoveImage(TabWindow, TabData.iImage);

			int Count = TabCtrl_GetItemCount(TabWindow);
			assert(Count >= 0);
			if(Count == 0) // We just removed the last one, do some addition cleanup
			{
				ShowWindow(reinterpret_cast<HWND>(TabData.lParam), SW_HIDE);
				HIMAGELIST ImageList = TabCtrl_GetImageList(TabWindow);
				if(ImageList)
				{
					ImageList_Destroy(ImageList);
					TabCtrl_SetImageList(TabWindow, NULL);
				}
				RemoveProp(TabWindow, PropName);
			}
			else if(Index == CurIndex) // We're deleting the currently visible tab
			{
				if(Index == Count) // Last tab
					Index--;
				TabToFront(TabWindow, Index);
			}

			SetTabThemeTexture(reinterpret_cast<HWND>(TabData.lParam), false);
			return true;
		}
	}
	return false;
}
Ejemplo n.º 2
0
INT_PTR DlgAbout::dlg_proc(UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND TabWindow;
static TabInfo* TabDlgInfo;
static TabLibraries* TabDlgLibs;
static TabLicense* TabDlgLicense;

	switch(message)
	{
	case WM_INITDIALOG:
		{
		// Prepare tabs
		TabWindow = GetDlgItem(this->window, TabAbout);
		TabDlgInfo    = new TabInfo(this->instance, this->window);
		TabDlgLibs    = new TabLibraries(this->instance, this->window);
		TabDlgLicense = new TabLicense(this->instance, this->window);

		TabDlgInfo->modeless();
		TabDlgLibs->modeless();
		TabDlgLicense->modeless();

		AddTab(TabWindow, TabDlgInfo->hwnd(),    L"Info",      -1);
		AddTab(TabWindow, TabDlgLibs->hwnd(),    L"3rd-party", -1);
		AddTab(TabWindow, TabDlgLicense->hwnd(), L"License",   -1);

		TabToFront(TabWindow, 0);

		// Set tab icons
		/*
		HICON TabIconFiles     = (HICON)LoadImage(Instance, MAKEINTRESOURCE(IDI_SETTINGS_FILE), IMAGE_ICON, 16, 16, 0);
		HICON TabIconInterface = (HICON)LoadImage(Instance, MAKEINTRESOURCE(IDI_SETTINGS_UI),   IMAGE_ICON, 16, 16, 0);
		SetTabIcon(TabWindow, TAB_FILE, TabIconFiles);
		SetTabIcon(TabWindow, TAB_UI,   TabIconInterface);
		DestroyIcon(TabIconFiles);
		DestroyIcon(TabIconInterface);
		*/
		}
		break;

	case WM_NOTIFY:
		{
		const NMHDR* nmHdr = reinterpret_cast<const NMHDR*>(lParam);
		assert(nmHdr);
		switch(nmHdr->code)
		{
			case TCN_SELCHANGE: // Get selected tab window to front
				if(nmHdr->hwndFrom == TabWindow)
				{
					TabToFront(TabWindow, -1);
					break;
				}
				return false;
			default:
				return false;
		}
		}
		break;

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case BnOKAbout:
			SendMessage(this->window, WM_CLOSE, 0, 0);
			break;

		default:
			return false;
		}
		break;

	case WM_CLOSE:
		TabDlgInfo->close();
		TabDlgLibs->close();
		TabDlgLicense->close();
		delete TabDlgInfo;
		delete TabDlgLibs;
		delete TabDlgLicense;
		this->internal_close(0);
		break;

	default:
		return false;
	}

	return true;
}
Ejemplo n.º 3
0
// Главна процедура
BOOL CALLBACK MainHandler(HWND Window, UINT Message, WPARAM wParam, LPARAM lParam)
{
	static HWND Window1, Window2;
	static HWND TabWindow;

	switch(Message)
	{
		case WM_INITDIALOG:
		{
			// Създаване два диалога като деца на главния диалог
			Window1 = CreateDialog(hInst, MAKEINTRESOURCE(IID_TAB1), Window, &TabHandler1);
			Window2 = CreateDialog(hInst, MAKEINTRESOURCE(IID_TAB2), Window, &TabHandler2);
			// Инициализиране на TabWindow дръжка със съответния ресурс - TAB_MAIN
			TabWindow = GetDlgItem(Window, TAB_MAIN);
			// Създаване на първия раздел (0 = пръв)
			AddTab(TabWindow, Window1, "Инсталиране Сервиз", 0);
			// Създаване на втория раздел
			AddTab(TabWindow, Window2, "Файлове", 1);
			// Показване на първия раздел
			TabToFront(TabWindow, 0);
		}
		break;

		case WM_NOTIFY:
			switch(((NMHDR *)lParam)->code)
			{
			case TCN_SELCHANGE:		// При промяна на разделите...
			{
				char buf[50];
				// Ако текущия контрол е TabWindow
				if (((LPNMHDR)lParam)->hwndFrom == TabWindow) {
					// Дали е селектиран втория раздел
					if (SendMessage(((LPNMHDR)lParam)->hwndFrom,(UINT)TCM_GETCURFOCUS,0,0) == 1) {
						GetDlgItemText(Window1, IDC_STATIC_STATUS, buf, 50);
						// Дали драйвера е инсталиран и работи
						if (strcmp("Installed And Running", buf) != 0) {
							MessageBox(Window, "Драйвера трябва да е стартуван", "FileHide", 0);
							TabToFront(TabWindow, 0);
							return FALSE;
						}
					}
					// Показване на следващия раздел (ако е последен -> пръв)
					TabToFront(TabWindow, -1);
				}
			}
			break;
			
			default: return FALSE;
			}
			break;

		case WM_CLOSE:
		{
			// Пращане на WM_CLOSE към втория диалог за стопиране и
			// изтриване на драйвера, преди да се изключи програмата
			SendMessage(Window1, WM_CLOSE, 0, 0);
			DestroyWindow(Window2);
			DestroyWindow(Window1);
			TabCleanup(TabWindow);
			EndDialog(Window, 0);
		}
		break;

		default:
			return FALSE;
	}
	return TRUE;
}