📄 twainhelper.h
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#pragma once
#include <Windows.h>
#include "Include/Twain.h"
#ifndef PCTSTR
#define PCTSTR LPCTSTR
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 使用方法
// 1. 调用 CTwainHelper::Initialize() 确定是否有可用的设备。
// 2. 在窗口消息循环中,调用 CTwainHelper::ProcessMessage() 处理 TWAIN 消息。
// 3. 要获取图像时,调用 CTwainHelper::GetImage()。
// 4. 如果图像已准备好 (如用户确定扫描图像),窗口会收到 WM_COMMAND 消息,wParam 为 IDC_TwainHelper。
// 此时应用程序可以调用 CTwainHelper::TransferImage() 获取图像到文件中。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 消息: 如果图像已准备好,父窗口将收到 WM_COMMAND 消息
// 参数: LOWORD(wParam) 为 IDC_TwainHelper,HIWORD(wParam) 第一次收到此消息时为 0,以后为总的图像个数
// 返回: 如果返回 S_FALSE,将不再传送后继的图像
// 备注: 收到此消息后,可以调用 TransferImage() 获取图像到文件中
#define IDC_TwainHelper 51234
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CTwainHelper 类
class CTwainHelper
{
private:
static HWND m_hParent; // 父窗口句柄
static HMODULE m_hTwain; // TWAIN 动态连接库模块句柄
static DSMENTRYPROC m_dpDsmEntry; // 数据源管理器入口函数地址
static TW_IDENTITY m_twidOrigin; // 程序标识信息
static TW_IDENTITY m_twidSource; // 数据源标识信息
public:
// 初始化 TWAIN 库
static BOOL Initialize(HWND hParent);
// 功能: 处理 TWAIN 消息
// 返回: 返回 TRUE 表示是 TWAIN 消息,此时父窗口不应该处理这个消息
// 备注: 在父窗口消息循环中应该调用此函数
static BOOL ProcessMessage(const PMSG pmsgMsg);
// 功能: 从 TWAIN 设备中获取图像,并以消息回调的形式通知父窗口
// 参数: uCount 指定要获取的图像的个数,0 表示不指定个数。此参数需要设备支持
// 返回: 返回 TRUE 表示成功或者用户取消,其它表示失败
// 备注: 如果调用成功,当图像准备好时,父窗口将到 WM_COMMAND 消息,请参看 IDC_TwainHelper 的说明
static BOOL GetImage(UINT uCount = 0);
// 传送图像到文件中
static BOOL TransferImage(PCTSTR ptzFileName);
// 关闭 TWAIN 对话框
static VOID Close();
private:
// 调用数据源管理器入口函数
inline static TW_UINT16 DsmEntry(pTW_IDENTITY ptwidDest,
TW_UINT32 twuGroup, TW_UINT16 twuData, TW_UINT16 twuMsg, TW_MEMREF ptwmData)
{
return m_dpDsmEntry(&m_twidOrigin, ptwidDest, twuGroup, twuData, twuMsg, ptwmData);
}
// 设置单值参数
inline static TW_UINT16 SetOneValueCap(TW_UINT16 twuCap, TW_UINT32 twuValue)
{
TW_CAPABILITY twcCap;
TW_ONEVALUE twovValue;
twcCap.Cap = twuCap;
twcCap.ConType = TWON_ONEVALUE;
twcCap.hContainer = &twovValue;
twovValue.Item = twuValue;
twovValue.ItemType = TWTY_INT16;
return DsmEntry(&m_twidSource, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twcCap);
}
// 显示获取图像对话框
inline static TW_UINT16 ShowUI()
{
TW_USERINTERFACE twuiUI;
twuiUI.ShowUI = TRUE;
twuiUI.ModalUI = TRUE;
twuiUI.hParent = m_hParent;
return DsmEntry(&m_twidSource, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &twuiUI);
}
// 隐藏获取图像对话框
inline static TW_UINT16 HideUI()
{
TW_USERINTERFACE twuiUI;
twuiUI.ShowUI = FALSE;
twuiUI.ModalUI = TRUE;
twuiUI.hParent = m_hParent;
return DsmEntry(&m_twidSource, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &twuiUI);
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -