add OFN_NOCHANGEDIR flag to OPENFILENAME::Flags in nana::filebox::show
http://blogs.msdn.com/b/oldnewthing/archive/2010/11/12/10089878.aspx setting OFN_NOCHANGEDIR flag to OPENFILENAME::Flags is effective for GetOpenFileName API on Windows7. add const qualifier to nana::paint::graphics::save_as_file add support for small icon on Windows. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption. https://msdn.microsoft.com/en-us/library/windows/desktop/ms632643%28v=vs.85%29.aspx
This commit is contained in:
@@ -537,6 +537,30 @@ namespace nana{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool native_interface::window_icon(native_window_type wd, const paint::image& big_icon, const paint::image& small_icon)
|
||||
{
|
||||
#if defined(NANA_WINDOWS)
|
||||
HICON h_big_icon = paint::image_accessor::icon(big_icon);
|
||||
HICON h_small_icon = paint::image_accessor::icon(small_icon);
|
||||
if (h_big_icon || h_small_icon)
|
||||
{
|
||||
nana::detail::platform_spec::instance().keep_window_icon(wd, (!big_icon.empty() ? big_icon : small_icon));
|
||||
if (h_big_icon) {
|
||||
::SendMessage(reinterpret_cast<HWND>(wd), WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(h_big_icon));
|
||||
}
|
||||
if (h_small_icon) {
|
||||
::SendMessage(reinterpret_cast<HWND>(wd), WM_SETICON, ICON_SMALL, reinterpret_cast<WPARAM>(h_small_icon));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#elif defined(NANA_X11)
|
||||
return window_icon(wd, big_icon);
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void native_interface::activate_owner(native_window_type wd)
|
||||
{
|
||||
#if defined(NANA_WINDOWS)
|
||||
|
||||
@@ -43,7 +43,8 @@ namespace detail
|
||||
root_register misc_register;
|
||||
handle_manager<core_window_t*, window_manager, window_handle_deleter> wd_register;
|
||||
signal_manager signal;
|
||||
paint::image default_icon;
|
||||
paint::image default_icon_big;
|
||||
paint::image default_icon_small;
|
||||
};
|
||||
//end struct wdm_private_impl
|
||||
|
||||
@@ -199,11 +200,6 @@ namespace detail
|
||||
}
|
||||
}
|
||||
|
||||
void window_manager::default_icon(const paint::image& img)
|
||||
{
|
||||
impl_->default_icon = img;
|
||||
}
|
||||
|
||||
bool window_manager::available(core_window_t* wd)
|
||||
{
|
||||
return impl_->wd_register.available(wd);
|
||||
@@ -264,7 +260,7 @@ namespace detail
|
||||
insert_frame(owner, wd);
|
||||
|
||||
bedrock::inc_window(wd->thread_id);
|
||||
this->icon(wd, impl_->default_icon);
|
||||
this->icon(wd, impl_->default_icon_big, impl_->default_icon_small);
|
||||
return wd;
|
||||
}
|
||||
return nullptr;
|
||||
@@ -404,6 +400,18 @@ namespace detail
|
||||
}
|
||||
}
|
||||
|
||||
void window_manager::default_icon(const paint::image& img)
|
||||
{
|
||||
impl_->default_icon_big = img;
|
||||
impl_->default_icon_small = img;
|
||||
}
|
||||
|
||||
void window_manager::default_icon(const nana::paint::image& big, const nana::paint::image& small)
|
||||
{
|
||||
impl_->default_icon_big = big;
|
||||
impl_->default_icon_small = small;
|
||||
}
|
||||
|
||||
void window_manager::icon(core_window_t* wd, const paint::image& img)
|
||||
{
|
||||
if(false == img.empty())
|
||||
@@ -417,6 +425,19 @@ namespace detail
|
||||
}
|
||||
}
|
||||
|
||||
void window_manager::icon(core_window_t* wd, const paint::image& big_icon, const paint::image& small_icon)
|
||||
{
|
||||
if(!big_icon.empty() || !small_icon.empty())
|
||||
{
|
||||
std::lock_guard<decltype(mutex_)> lock(mutex_);
|
||||
if (impl_->wd_register.available(wd))
|
||||
{
|
||||
if(wd->other.category == category::root_tag::value)
|
||||
native_interface::window_icon(wd->root, big_icon, small_icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//show
|
||||
//@brief: show or hide a window
|
||||
bool window_manager::show(core_window_t* wd, bool visible)
|
||||
|
||||
@@ -1021,6 +1021,7 @@ namespace nana
|
||||
|
||||
if (!impl_->open_or_save)
|
||||
ofn.Flags = OFN_OVERWRITEPROMPT; //Overwrite prompt if it is save mode
|
||||
ofn.Flags |= OFN_NOCHANGEDIR;
|
||||
|
||||
if(FALSE == (impl_->open_or_save ? ::GetOpenFileName(&ofn) : ::GetSaveFileName(&ofn)))
|
||||
return false;
|
||||
|
||||
@@ -359,11 +359,21 @@ namespace API
|
||||
restrict::window_manager.default_icon(img);
|
||||
}
|
||||
|
||||
void window_icon_default(const paint::image& big_icon, const paint::image& small_icon)
|
||||
{
|
||||
restrict::window_manager.default_icon(big_icon, small_icon);
|
||||
}
|
||||
|
||||
void window_icon(window wd, const paint::image& img)
|
||||
{
|
||||
restrict::window_manager.icon(reinterpret_cast<restrict::core_window_t*>(wd), img);
|
||||
}
|
||||
|
||||
void window_icon(window wd, const paint::image& big_icon, const paint::image& small_icon)
|
||||
{
|
||||
restrict::window_manager.icon(reinterpret_cast<restrict::core_window_t*>(wd), big_icon, small_icon);
|
||||
}
|
||||
|
||||
bool empty_window(window wd)
|
||||
{
|
||||
return (restrict::window_manager.available(reinterpret_cast<restrict::core_window_t*>(wd)) == false);
|
||||
|
||||
Reference in New Issue
Block a user