Example #1
0
BOOL
CScreensLinks::doDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) {
	case WM_INITDIALOG:
		init(hwnd);
		return TRUE;

	case WM_SIZE:
		resizeErrorBoxes();
		break;

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			SetFocus(getItem(hwnd, IDOK));
			if (save(hwnd)) {
				EndDialog(hwnd, 0);
			}
			return TRUE;

		case IDCANCEL:
			EndDialog(hwnd, 0);
			return TRUE;

		case IDC_SCREENS_SCREENS:
			switch (HIWORD(wParam)) {
			case LBN_DBLCLK:
				editScreen(hwnd);
				return TRUE;

			case LBN_SELCHANGE:
				updateScreensControls(hwnd);
				updateLinkView(hwnd);
				return TRUE;

			case LBN_SELCANCEL:
				updateScreensControls(hwnd);
				updateLinkView(hwnd);
				return TRUE;
			}
			break;

		case IDC_SCREENS_ADD_SCREEN:
			addScreen(hwnd);
			return TRUE;

		case IDC_SCREENS_REMOVE_SCREEN:
			removeScreen(hwnd);
			return TRUE;

		case IDC_SCREENS_EDIT_SCREEN:
			editScreen(hwnd);
			return TRUE;

		case IDC_SCREENS_LINKS:
			switch (HIWORD(wParam)) {
			case LBN_SELCHANGE:
				editLink(hwnd);
				return TRUE;

			case LBN_SELCANCEL:
				editLink(hwnd);
				return TRUE;
			}
			break;

		case IDC_SCREENS_ADD_LINK:
			addLink(hwnd);
			return TRUE;

		case IDC_SCREENS_REMOVE_LINK:
			removeLink(hwnd);
			return TRUE;

		case IDC_SCREENS_SRC_SIDE:
			switch (HIWORD(wParam)) {
			case CBN_SELCHANGE:
				changeSrcSide(hwnd);
				break;
			}
			break;

		case IDC_SCREENS_SRC_SCREEN:
			switch (HIWORD(wParam)) {
			case CBN_SELCHANGE:
				changeSrcScreen(hwnd);
				break;
			}
			break;

		case IDC_SCREENS_DST_SCREEN:
			switch (HIWORD(wParam)) {
			case CBN_SELCHANGE:
				changeDstScreen(hwnd);
				break;
			}
			break;

		case IDC_SCREENS_SRC_START:
			switch (HIWORD(wParam)) {
			case EN_KILLFOCUS:
				changeIntervalStart(hwnd, LOWORD(wParam),
							m_editedLink.m_srcInterval);
				break;
			}
			break;

		case IDC_SCREENS_SRC_END:
			switch (HIWORD(wParam)) {
			case EN_KILLFOCUS:
				changeIntervalEnd(hwnd, LOWORD(wParam),
							m_editedLink.m_srcInterval);
				break;
			}
			break;

		case IDC_SCREENS_DST_START:
			switch (HIWORD(wParam)) {
			case EN_KILLFOCUS:
				changeIntervalStart(hwnd, LOWORD(wParam),
							m_editedLink.m_dstInterval);
				break;
			}
			break;

		case IDC_SCREENS_DST_END:
			switch (HIWORD(wParam)) {
			case EN_KILLFOCUS:
				changeIntervalEnd(hwnd, LOWORD(wParam),
							m_editedLink.m_dstInterval);
				break;
			}
			break;
		}

		break;

	case WM_CTLCOLORSTATIC:
		switch (GetDlgCtrlID((HWND)lParam)) {
		case IDC_SCREENS_OVERLAP_ERROR:
			SetBkColor((HDC)wParam, GetSysColor(COLOR_3DFACE));
			SetTextColor((HDC)wParam, RGB(255, 0, 0));
			return (BOOL)GetSysColorBrush(COLOR_3DFACE);
		}
		break;

	// error outlines
	case WM_DRAWITEM: {
		DRAWITEMSTRUCT* di = (DRAWITEMSTRUCT*)lParam;
		if (di->CtlType == ODT_STATIC) {
			HGDIOBJ oldPen   = SelectObject(di->hDC, m_redPen);
			HGDIOBJ oldBrush = SelectObject(di->hDC,
										GetStockObject(NULL_BRUSH));
			Rectangle(di->hDC, di->rcItem.left, di->rcItem.top,
							di->rcItem.right, di->rcItem.bottom);
			SelectObject(di->hDC, oldPen);
			SelectObject(di->hDC, oldBrush);
			return TRUE;
		}
		break;
	}

	default:
		break;
	}

	return FALSE;
}
Example #2
0
static
LRESULT CALLBACK
mainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) {
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDCANCEL:
			// test for unsaved data
			if (ARG->m_config != ARG->m_oldConfig) {
				if (!askVerify(hwnd, getString(IDS_UNSAVED_DATA_REALLY_QUIT))) {
					return 0;
				}
			}

			// quit
			PostQuitMessage(0);
			return 0;

		case IDOK:
		case IDC_MAIN_TEST: {
			// note if testing
			const bool testing = (LOWORD(wParam) == IDC_MAIN_TEST);

			// save data
			if (ARG->m_config != ARG->m_oldConfig) {
				if (!saveConfig(ARG->m_config, false)) {
					showError(hwnd, CStringUtil::format(
								getString(IDS_SAVE_FAILED).c_str(),
								getErrorString(GetLastError()).c_str()));
					return 0;
				}
				ARG->m_oldConfig = ARG->m_config;
				enableSaveControls(hwnd);
			}

			// launch child app
			DWORD threadID;
			HANDLE thread = launchApp(hwnd, testing, &threadID);
			if (thread == NULL) {
				return 0;
			}

			// handle child program
			if (testing) {
				// wait for process to stop, allowing the user to kill it
				waitForChild(hwnd, thread, threadID);

				// clean up
				CloseHandle(thread);
			}
			else {
				// don't need thread handle
				CloseHandle(thread);

				// notify of success
				askOkay(hwnd, getString(IDS_STARTED_TITLE),
								getString(IDS_STARTED));

				// quit
				PostQuitMessage(0);
			}
			return 0;
		}

		case IDC_MAIN_AUTOSTART: {
			// construct command line
			CString cmdLine = getCommandLine(hwnd, false);
			if (!cmdLine.empty()) {
				// run dialog
				CAutoStart autoStart(hwnd,
							isClientChecked(hwnd) ? NULL : &ARG->m_config,
							cmdLine);
				autoStart.doModal();
				if (autoStart.wasUserConfigSaved()) {
					ARG->m_oldConfig = ARG->m_config;
					enableSaveControls(hwnd);
				}
			}
			return 0;
		}

		case IDC_MAIN_SAVE:
			if (!saveConfig(ARG->m_config, false)) {
				showError(hwnd, CStringUtil::format(
								getString(IDS_SAVE_FAILED).c_str(),
								getErrorString(GetLastError()).c_str()));
			}
			else {
				ARG->m_oldConfig = ARG->m_config;
				enableSaveControls(hwnd);
			}
			return 0;

		case IDC_MAIN_CLIENT_RADIO:
		case IDC_MAIN_SERVER_RADIO:
			enableMainWindowControls(hwnd);
			return 0;

		case IDC_MAIN_SERVER_ADD_BUTTON:
			addScreen(hwnd);
			return 0;

		case IDC_MAIN_SERVER_EDIT_BUTTON:
			editScreen(hwnd);
			return 0;

		case IDC_MAIN_SERVER_REMOVE_BUTTON:
			removeScreen(hwnd);
			return 0;

		case IDC_MAIN_SERVER_SCREENS_LIST:
			if (HIWORD(wParam) == LBN_SELCHANGE) {
				enableScreensControls(hwnd);
				updateNeighbors(hwnd);
			}
			else if (HIWORD(wParam) == LBN_DBLCLK) {
				editScreen(hwnd);
				return 0;
			}
			break;

		case IDC_MAIN_SERVER_LEFT_COMBO:
			if (HIWORD(wParam) == CBN_SELENDOK) {
				changeNeighbor(hwnd, (HWND)lParam, kLeft);
				return 0;
			}
			break;

		case IDC_MAIN_SERVER_RIGHT_COMBO:
			if (HIWORD(wParam) == CBN_SELENDOK) {
				changeNeighbor(hwnd, (HWND)lParam, kRight);
				return 0;
			}
			break;

		case IDC_MAIN_SERVER_TOP_COMBO:
			if (HIWORD(wParam) == CBN_SELENDOK) {
				changeNeighbor(hwnd, (HWND)lParam, kTop);
				return 0;
			}
			break;

		case IDC_MAIN_SERVER_BOTTOM_COMBO:
			if (HIWORD(wParam) == CBN_SELENDOK) {
				changeNeighbor(hwnd, (HWND)lParam, kBottom);
				return 0;
			}
			break;

		case IDC_MAIN_OPTIONS:
			s_globalOptions->doModal();
			enableSaveControls(hwnd);
			break;

		case IDC_MAIN_ADVANCED:
			s_advancedOptions->doModal(isClientChecked(hwnd));
			enableSaveControls(hwnd);
			break;
		}

	default:
		break;
	}
	return DefDlgProc(hwnd, message, wParam, lParam);
}