解决新版twain 设置界面点击取消不能扫描不能使用点击设置,不显示进度指示器崩溃
This commit is contained in:
parent
3728253810
commit
8a70b2f6ed
|
@ -1,4 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup />
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LocalDebuggerCommand>C:\Program Files\HuaGoScan\HuaGoScan.exe</LocalDebuggerCommand>
|
||||||
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -282,7 +282,7 @@ struct __declspec(novtable) ISaneInvoker : public IRef
|
||||||
// ui ...
|
// ui ...
|
||||||
COM_API_DECLARE(bool, ui_show_main(HWND parent));
|
COM_API_DECLARE(bool, ui_show_main(HWND parent));
|
||||||
COM_API_DECLARE(bool, ui_show_setting(HWND parent, bool with_scan, bool indicator = true));
|
COM_API_DECLARE(bool, ui_show_setting(HWND parent, bool with_scan, bool indicator = true));
|
||||||
COM_API_DECLARE(bool, ui_show_progress(HWND parent));
|
COM_API_DECLARE(bool, ui_show_progress(HWND parent, bool bIndicator));
|
||||||
COM_API_DECLARE(void, ui_hide(void));
|
COM_API_DECLARE(void, ui_hide(void));
|
||||||
COM_API_DECLARE(bool, ui_is_ok(void));
|
COM_API_DECLARE(bool, ui_is_ok(void));
|
||||||
|
|
||||||
|
|
|
@ -386,7 +386,7 @@ scanner::scanner(SCANNERID id) : handle_(NULL), id_(id), ex_id_(EXTENSION_ID_BAS
|
||||||
, dpi_(200), tmp_path_(L""), img_ind_(0)
|
, dpi_(200), tmp_path_(L""), img_ind_(0)
|
||||||
, scanner_name_(L""), cfg_(NULL), is_ui_wait_img_(false), is_scanning_(false)
|
, scanner_name_(L""), cfg_(NULL), is_ui_wait_img_(false), is_scanning_(false)
|
||||||
, scanner_ev_handler_(NULL), evh_param_(NULL), app_wnd_(NULL), user_cancel_(false)
|
, scanner_ev_handler_(NULL), evh_param_(NULL), app_wnd_(NULL), user_cancel_(false)
|
||||||
, max_img_mem_(1 * 1024), twain_set_(false), ev_cnt_(0)
|
, max_img_mem_(1 * 1024), twain_set_(false), ev_cnt_(0), is_bIndicator(false)
|
||||||
{
|
{
|
||||||
sane_api_.sane_cancel_api = inner_sane_cancel;
|
sane_api_.sane_cancel_api = inner_sane_cancel;
|
||||||
sane_api_.sane_close_api = inner_sane_close;
|
sane_api_.sane_close_api = inner_sane_close;
|
||||||
|
@ -2410,8 +2410,8 @@ COM_API_IMPLEMENT(scanner, int, start(void))
|
||||||
|
|
||||||
if (ret == SANE_STATUS_GOOD)
|
if (ret == SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
if (indicator_.get() && !IsWindowVisible(indicator_->hwnd()))
|
/*if (indicator_.get() && !IsWindowVisible(indicator_->hwnd()))
|
||||||
indicator_->show(true);
|
indicator_->show(true);*/
|
||||||
|
|
||||||
unsigned int l = sizeof(img_fmt_);
|
unsigned int l = sizeof(img_fmt_);
|
||||||
SANE_CompressionType cmprsn = img_fmt_.compress.compression;
|
SANE_CompressionType cmprsn = img_fmt_.compress.compression;
|
||||||
|
@ -2427,8 +2427,8 @@ COM_API_IMPLEMENT(scanner, int, start(void))
|
||||||
{
|
{
|
||||||
std::wstring msg(local_trans::a2u(hg_scanner_err_description(ret), CP_UTF8));
|
std::wstring msg(local_trans::a2u(hg_scanner_err_description(ret), CP_UTF8));
|
||||||
|
|
||||||
if (indicator_.get())
|
//if (indicator_.get())
|
||||||
indicator_->show(false);
|
// indicator_->show(false);
|
||||||
if (!IsWindow(app_wnd_))
|
if (!IsWindow(app_wnd_))
|
||||||
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str());
|
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str());
|
||||||
MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str(), MB_OK | MB_ICONERROR);
|
MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_START_FAILED).c_str(), MB_OK | MB_ICONERROR);
|
||||||
|
@ -2959,6 +2959,11 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_setting(HWND parent, bool with_scan, bo
|
||||||
//start();
|
//start();
|
||||||
on_ui_event(SANE_EVENT_UI_SCAN_COMMAND, NULL);
|
on_ui_event(SANE_EVENT_UI_SCAN_COMMAND, NULL);
|
||||||
}
|
}
|
||||||
|
else if (res == UI_RESULT_CLOSE_CANCEL)
|
||||||
|
{
|
||||||
|
int ev = SANE_EVENT_UI_CLOSE_CANCEL;
|
||||||
|
on_ui_event(ev, (void*)ev);
|
||||||
|
}
|
||||||
//on_ui_event(ev, NULL);
|
//on_ui_event(ev, NULL);
|
||||||
}
|
}
|
||||||
else if (cfg_)
|
else if (cfg_)
|
||||||
|
@ -2989,9 +2994,10 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_setting(HWND parent, bool with_scan, bo
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent))
|
COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent, bool bIndicator))
|
||||||
{
|
{
|
||||||
if (callback::show_progress_ui)
|
is_bIndicator = bIndicator;
|
||||||
|
if (callback::show_progress_ui && bIndicator)
|
||||||
{
|
{
|
||||||
auto ui_process = [this](ui_result res)
|
auto ui_process = [this](ui_result res)
|
||||||
{
|
{
|
||||||
|
@ -3023,14 +3029,14 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent))
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (setting_.get() && IsWindowVisible(setting_->hwnd()))
|
/*if (setting_.get() && IsWindowVisible(setting_->hwnd()))
|
||||||
parent = setting_->hwnd();
|
parent = setting_->hwnd();
|
||||||
else if (!IsWindow(parent))
|
else if (!IsWindow(parent))
|
||||||
parent = callback::find_main_wnd();
|
parent = callback::find_main_wnd();
|
||||||
|
|
||||||
indicator_.reset(new dlg_indicator(parent));
|
indicator_.reset(new dlg_indicator(parent));
|
||||||
indicator_->set_ui_event_notify(&scanner::ui_callback, this);
|
indicator_->set_ui_event_notify(&scanner::ui_callback, this);
|
||||||
indicator_->show(true);
|
indicator_->show(true);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -3054,12 +3060,16 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
|
||||||
{
|
{
|
||||||
if (ev_code == SANE_EVENT_WORKING)
|
if (ev_code == SANE_EVENT_WORKING)
|
||||||
{
|
{
|
||||||
if (indicator_.get())
|
//if (indicator_.get())
|
||||||
indicator_->notify_working();
|
// indicator_->notify_working();
|
||||||
else
|
//else on_ui_event(ev_code, (void*)ev_code);
|
||||||
|
|
||||||
|
if (callback::show_progress_ui && is_bIndicator)
|
||||||
|
ui_notify(ev_code, data, 0);
|
||||||
|
//else
|
||||||
on_ui_event(ev_code, (void*)ev_code);
|
on_ui_event(ev_code, (void*)ev_code);
|
||||||
|
|
||||||
ui_notify(ev_code, data, 0);
|
|
||||||
|
|
||||||
log_info(L"Scanning ...\r\n", 0);
|
log_info(L"Scanning ...\r\n", 0);
|
||||||
}
|
}
|
||||||
|
@ -3093,8 +3103,8 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
|
||||||
{
|
{
|
||||||
img->release();
|
img->release();
|
||||||
}
|
}
|
||||||
if (indicator_.get())
|
//if (indicator_.get())
|
||||||
indicator_->notify_data_arrived(true);
|
// indicator_->notify_data_arrived(true);
|
||||||
|
|
||||||
{
|
{
|
||||||
wchar_t msg[128] = { 0 };
|
wchar_t msg[128] = { 0 };
|
||||||
|
@ -3104,21 +3114,19 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
|
||||||
}
|
}
|
||||||
else if (ev_code == SANE_EVENT_USB_DATA_RECEIVED)
|
else if (ev_code == SANE_EVENT_USB_DATA_RECEIVED)
|
||||||
{
|
{
|
||||||
if (indicator_.get())
|
//if (indicator_.get())
|
||||||
indicator_->notify_data_arrived(false);
|
// indicator_->notify_data_arrived(false);
|
||||||
}
|
}
|
||||||
else if (ev_code == SANE_EVENT_SCAN_FINISHED)
|
else if (ev_code == SANE_EVENT_SCAN_FINISHED)
|
||||||
{
|
{
|
||||||
err_ = *len;
|
err_ = *len;
|
||||||
if (indicator_.get())
|
//if (indicator_.get())
|
||||||
indicator_->notify_scan_over((char*)data, *len != SCANNER_ERR_OK);
|
// indicator_->notify_scan_over((char*)data, *len != SCANNER_ERR_OK);
|
||||||
else if (callback::show_progress_ui)
|
if (callback::show_progress_ui && is_bIndicator)
|
||||||
{
|
|
||||||
ui_notify(ev_code, data, 0);
|
ui_notify(ev_code, data, 0);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (*len)
|
//if (*len)
|
||||||
{
|
{
|
||||||
std::wstring msg(local_trans::a2u((char*)data, CP_UTF8));
|
std::wstring msg(local_trans::a2u((char*)data, CP_UTF8));
|
||||||
if(!IsWindow(app_wnd_))
|
if(!IsWindow(app_wnd_))
|
||||||
|
|
|
@ -38,6 +38,7 @@ class scanner : public ISaneInvoker, virtual public refer
|
||||||
int ex_id_;
|
int ex_id_;
|
||||||
int prev_start_result_;
|
int prev_start_result_;
|
||||||
int dpi_;
|
int dpi_;
|
||||||
|
bool is_bIndicator;
|
||||||
unsigned int img_ind_;
|
unsigned int img_ind_;
|
||||||
std::wstring scanner_name_;
|
std::wstring scanner_name_;
|
||||||
std::wstring tmp_path_;
|
std::wstring tmp_path_;
|
||||||
|
@ -315,7 +316,7 @@ public:
|
||||||
// ui ...
|
// ui ...
|
||||||
COM_API_OVERRIDE(bool, ui_show_main(HWND parent));
|
COM_API_OVERRIDE(bool, ui_show_main(HWND parent));
|
||||||
COM_API_OVERRIDE(bool, ui_show_setting(HWND parent, bool with_scan, bool indicator = true));
|
COM_API_OVERRIDE(bool, ui_show_setting(HWND parent, bool with_scan, bool indicator = true));
|
||||||
COM_API_OVERRIDE(bool, ui_show_progress(HWND parent));
|
COM_API_OVERRIDE(bool, ui_show_progress(HWND parent, bool bIndicator));
|
||||||
COM_API_OVERRIDE(void, ui_hide(void));
|
COM_API_OVERRIDE(void, ui_hide(void));
|
||||||
COM_API_OVERRIDE(bool, ui_is_ok(void));
|
COM_API_OVERRIDE(bool, ui_is_ok(void));
|
||||||
|
|
||||||
|
|
|
@ -78,11 +78,11 @@
|
||||||
<OutDir>$(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\</OutDir>
|
<OutDir>$(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\tmp\$(PlatformTarget)\huagao\$(Configuration)\$(ProjectName)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\tmp\$(PlatformTarget)\huagao\$(Configuration)\$(ProjectName)\</IntDir>
|
||||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||||
<TargetName>huagaotwain400.ds</TargetName>
|
<TargetName>huagaotwain200.ds</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||||
<TargetName>huagaotwain400.ds</TargetName>
|
<TargetName>huagaotwain200.ds</TargetName>
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<IncludePath>$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\sdk\include\twain\;$(IncludePath)</IncludePath>
|
<IncludePath>$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\sdk\include\twain\;$(IncludePath)</IncludePath>
|
||||||
<OutDir>$(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\</OutDir>
|
<OutDir>$(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\</OutDir>
|
||||||
|
@ -126,9 +126,9 @@
|
||||||
<Command>copy "$(TargetPath)" C:\Windows\twain_32\HuagoTwain\$(TargetName) /y
|
<Command>copy "$(TargetPath)" C:\Windows\twain_32\HuagoTwain\$(TargetName) /y
|
||||||
move /Y "$(TargetPath)" "$(OutputPath)$(TargetName)"
|
move /Y "$(TargetPath)" "$(OutputPath)$(TargetName)"
|
||||||
mkdir "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
mkdir "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
||||||
move /Y "$(OutputPath)$(TargetName).lib" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
copy /Y "$(OutputPath)$(TargetName).lib" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
||||||
move /Y "$(OutputPath)$(TargetName).exp" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
copy /Y "$(OutputPath)$(TargetName).exp" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"
|
||||||
move /Y "$(OutputPath)$(TargetName).pdb" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"</Command>
|
copy /Y "$(OutputPath)$(TargetName).pdb" "$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\OEM\huagao"</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup />
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LocalDebuggerCommand>D:\work\code\twain-samples-master\TWAIN-Samples\Twain_App_sample01\visual_studio_mfc\Release\TWAIN_App_mfc32.exe</LocalDebuggerCommand>
|
||||||
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
<LocalDebuggerWorkingDirectory>C:\Windows\twain_32\HuaGoTwain</LocalDebuggerWorkingDirectory>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -1173,8 +1173,9 @@ Result huagao_ds::userInterfaceEnable(const Identity&, UserInterface& ui)
|
||||||
{
|
{
|
||||||
if (!ui.showUi())
|
if (!ui.showUi())
|
||||||
{
|
{
|
||||||
if (m_bIndicator && !scanner_->ui_show_progress((HWND)ui.parent().raw()))
|
scanner_->ui_show_progress((HWND)ui.parent().raw(), m_bIndicator);
|
||||||
return seqError();
|
//if (m_bIndicator && !)
|
||||||
|
// return seqError();
|
||||||
|
|
||||||
xfer_ready_failed_ = false;
|
xfer_ready_failed_ = false;
|
||||||
scanner_->twain_set_transfer((twain_xfer)m_capXferMech);
|
scanner_->twain_set_transfer((twain_xfer)m_capXferMech);
|
||||||
|
@ -3467,7 +3468,7 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc)
|
||||||
break;
|
break;
|
||||||
case SANE_EVENT_UI_SCAN_COMMAND:
|
case SANE_EVENT_UI_SCAN_COMMAND:
|
||||||
if (m_bIndicator)
|
if (m_bIndicator)
|
||||||
scanner_->ui_show_progress(NULL);
|
scanner_->ui_show_progress(NULL, m_bIndicator);
|
||||||
else
|
else
|
||||||
scanner_->ui_hide();
|
scanner_->ui_hide();
|
||||||
scanner_status_ = SCANNER_STATUS_SCAN_1;
|
scanner_status_ = SCANNER_STATUS_SCAN_1;
|
||||||
|
|
Loading…
Reference in New Issue