⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pageclbk.cpp

📁 win2000打印机驱动代码
💻 CPP
字号:
/*
 * @file ui/pageclbk.cpp Callback function for property pages.
 *
 * W2kPrintDrvSample
 *
 * Copyright (C) 2004, terrificskyfox <terrificskyfox@yahoo.com.cn>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "precomp.h"
#include "debug.h"
#include "oemui.h"
#include "devmode.h"
#include "resource.h"
#include "pageclbk.h"


/*
 *  Internal prototypes
 */

static void init_custom(HWND hDlg, PDIALOGINFO pdi);
static void custom_init_color_settings(HWND hDlg, PDIALOGINFO pdi);
static void custom_enable_settings(HWND hDlg, PDIALOGINFO pdi);


/*
 *  Implementations
 */

/*
 * Function: DlgCustomProc
 *
 * Purpose: Call back function for IDD_CUSTOM dialog.
 *
 * Return: BOOL
 */
BOOL CALLBACK DlgCustomProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	PDIALOGINFO pdi = NULL;


	switch(uMsg)
	{
	case WM_INITDIALOG:
		pdi = (PDIALOGINFO)(((LPPROPSHEETPAGE)lParam)->lParam);
		SetWindowLong(hDlg, DWL_USER, (LONG)pdi);

		init_custom(hDlg, pdi);
		break;

	case WM_COMMAND:
		pdi = (PDIALOGINFO)GetWindowLong(hDlg, DWL_USER);

		switch(LOWORD(wParam))
		{
		// black ~ cyan, check bitmaped button
		case IDC_BITMAPED_BLACK:
		case IDC_BITMAPED_RED:
		case IDC_BITMAPED_GREEN:
		case IDC_BITMAPED_BLUE:
		case IDC_BITMAPED_YELLOW:
		case IDC_BITMAPED_MAGENTA:
		case IDC_BITMAPED_CYAN:
            pdi->pOemDev->dmPenInfo[LOWORD(wParam) - IDC_BITMAPED_BLACK].pibBitmaped ^= 1;
			PropSheet_Changed(GetParent(hDlg), hDlg);
			break;

		// black ~ cyan, check path button
		case IDC_PATH_BLACK:
		case IDC_PATH_RED:
		case IDC_PATH_GREEN:
		case IDC_PATH_BLUE:
		case IDC_PATH_YELLOW:
		case IDC_PATH_MAGENTA:
		case IDC_PATH_CYAN:
            pdi->pOemDev->dmPenInfo[LOWORD(wParam) - IDC_PATH_BLACK].pibPath ^= 1;
			PropSheet_Changed(GetParent(hDlg), hDlg);
			break;

		// black ~ cyan, check text button
		case IDC_TEXT_BLACK:
		case IDC_TEXT_RED:
		case IDC_TEXT_GREEN:
		case IDC_TEXT_BLUE:
		case IDC_TEXT_YELLOW:
		case IDC_TEXT_MAGENTA:
		case IDC_TEXT_CYAN:
            pdi->pOemDev->dmPenInfo[LOWORD(wParam) - IDC_TEXT_BLACK].pibText ^= 1;
			PropSheet_Changed(GetParent(hDlg), hDlg);
			break;

		default:
			return FALSE;
		}
		break;

	// property sheet notification messages
	case WM_NOTIFY:
		{
			NMHDR FAR * lpnmhdr = (NMHDR FAR *)lParam;
			pdi = (PDIALOGINFO)GetWindowLong(hDlg, DWL_USER);

			switch(lpnmhdr->code)
			{
            // validate parameters
			case PSN_KILLACTIVE:
				SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
				break;

			// when page is to be active, perform initialization here
			case PSN_SETACTIVE:
                if(pdi->pOemDev->dmOldColor != pdi->pPubDev->dmColor) // color mode changed
                {
                    custom_enable_settings(hDlg, pdi);

                    pdi->pOemDev->dmOldColor = pdi->pPubDev->dmColor;
                }
				break;

			// handel ok or apply button
			case PSN_APPLY:
				pdi->bOK = TRUE;
				SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
				break;

			// handel cancel button
			case PSN_RESET:
				pdi->bOK = FALSE;
				break;

			// Handle help request
			case PSN_HELP:
				break;
			}
		}
		break;

	case WM_HELP:
		break;

	case WM_CONTEXTMENU:
		break;
		
	default:
		return FALSE;
	}

	return TRUE;
}


/*
 * Function: DlgAboutProc
 *
 * Purpose: Call back function for IDD_ABOUT dialog.
 *
 * Return: BOOL
 */
BOOL CALLBACK DlgAboutProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		break;

	// property sheet notification messages
	case WM_NOTIFY:
		{
			NMHDR FAR * lpnmhdr = (NMHDR FAR *)lParam;

			switch(lpnmhdr->code)
			{
			// validate dialog data
			case PSN_KILLACTIVE:
				SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
				break;

			// when page is to be active, perform initialization here
			case PSN_SETACTIVE:
				break;

			// handel ok or apply button
			case PSN_APPLY:
				SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
				break;

			// handel cancel button
			case PSN_RESET:
				break;

			// handle help request
			case PSN_HELP:
				break;
			}
		}
		break;

	case WM_HELP:
		break;

	case WM_CONTEXTMENU:
		break;

	default:
		return FALSE;
	}

	return TRUE;
}


/*
 *  Internal implementation
 */

/*
 * Function: init_custom
 *
 * Purpose: IDD_CUSTOM: Initialize IDD_CUSTOM dialog page.
 *
 * Return: NULL
 */
static void init_custom(HWND hDlg, PDIALOGINFO pdi)
{
	// init color settings
    custom_init_color_settings(hDlg, pdi);
    custom_enable_settings(hDlg, pdi);
}

/*
 * Function: custom_init_color_settings
 *
 * Purpose: IDD_CUSTOM: Initialize color settings.
 *
 * Return: NULL
 */
static void custom_init_color_settings(HWND hDlg, PDIALOGINFO pdi)
{
    for(short Loop = 0; Loop < NUM_COLORS; Loop++)
    {
        CheckDlgButton(hDlg, IDC_BITMAPED_BLACK + Loop, pdi->pOemDev->dmPenInfo[Loop].pibBitmaped);
        CheckDlgButton(hDlg, IDC_PATH_BLACK + Loop, pdi->pOemDev->dmPenInfo[Loop].pibPath);
        CheckDlgButton(hDlg, IDC_TEXT_BLACK + Loop, pdi->pOemDev->dmPenInfo[Loop].pibText);
    }
}

/*
 * Function: custom_enable_settings
 *
 * Purpose: IDD_CUSTOM: Enable/disable controls.
 *
 * Return: NULL
 */
static void custom_enable_settings(HWND hDlg, PDIALOGINFO pdi)
{
    for(short Loop = PCOLOR_RED; Loop < NUM_COLORS; Loop++)
    {
        if(pdi->pPubDev->dmColor == DMCOLOR_MONOCHROME) // mono
        {
            ShowWindow(GetDlgItem(hDlg, IDC_COLOR_BLACK + Loop), SW_HIDE);
            EnableWindow(GetDlgItem(hDlg, IDC_BITMAPED_BLACK + Loop), FALSE);
            EnableWindow(GetDlgItem(hDlg, IDC_PATH_BLACK + Loop), FALSE);
            EnableWindow(GetDlgItem(hDlg, IDC_TEXT_BLACK + Loop), FALSE);
        }
        else // color
        {
            ShowWindow(GetDlgItem(hDlg, IDC_COLOR_BLACK + Loop), SW_SHOW);
            EnableWindow(GetDlgItem(hDlg, IDC_BITMAPED_BLACK + Loop), TRUE);
            EnableWindow(GetDlgItem(hDlg, IDC_PATH_BLACK + Loop), TRUE);
            EnableWindow(GetDlgItem(hDlg, IDC_TEXT_BLACK + Loop), TRUE);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -