handle WM_NOTIFYFORMAT

svn path=/trunk/; revision=8738
This commit is contained in:
Martin Fuchs 2004-03-14 22:20:10 +00:00
parent c53a01dce1
commit b95e68a45d
3 changed files with 45 additions and 16 deletions

View file

@ -95,24 +95,20 @@ NotifyInfo& NotifyInfo::operator=(NOTIFYICONDATA* pnid)
// store tool tip text // store tool tip text
if (pnid->uFlags & NIF_TIP) if (pnid->uFlags & NIF_TIP)
if (pnid->cbSize==NID_SIZE_W6 || pnid->cbSize==NID_SIZE_W5 || pnid->cbSize==NID_SIZE_W3) if (pnid->cbSize==NID_SIZE_W6 || pnid->cbSize==NID_SIZE_W5 || pnid->cbSize==NID_SIZE_W3) {
{ // UNICODE version of NOTIFYICONDATA structure // UNICODE version of NOTIFYICONDATA structure
LPCWSTR txt = (LPCWSTR)pnid->szTip; LPCWSTR txt = (LPCWSTR)pnid->szTip;
// get string length
int max_len = pnid->cbSize==NID_SIZE_W3? 64: 128; int max_len = pnid->cbSize==NID_SIZE_W3? 64: 128;
// get tooltip string length
int l = 0; int l = 0;
for(; l<max_len; ++l) for(; l<max_len; ++l)
if (!txt[l]) if (!txt[l])
break; break;
_tipText.assign(txt, l); _tipText.assign(txt, l);
} else if (pnid->cbSize==NID_SIZE_A6 || pnid->cbSize==NID_SIZE_A5 || pnid->cbSize==NID_SIZE_A3) } else if (pnid->cbSize==NID_SIZE_A6 || pnid->cbSize==NID_SIZE_A5 || pnid->cbSize==NID_SIZE_A3) {
{ // ANSI version of NOTIFYICONDATA structure
LPCSTR txt = (LPCSTR)pnid->szTip; LPCSTR txt = (LPCSTR)pnid->szTip;
// get string length
int max_len = pnid->cbSize==NID_SIZE_A3? 64: 128; int max_len = pnid->cbSize==NID_SIZE_A3? 64: 128;
int l = 0; int l = 0;
@ -378,9 +374,10 @@ void NotifyArea::Refresh()
// sync tooltip areas to current icon number // sync tooltip areas to current icon number
if (_sorted_icons.size() != _last_icon_count) { if (_sorted_icons.size() != _last_icon_count) {
RECT rect = {2, 3, 2+16, 3+16}; RECT rect = {2, 3, 2+16, 3+16};
size_t tt_idx = 0; size_t icon_cnt = _sorted_icons.size();
for(NotifyIconSet::const_iterator it=_sorted_icons.begin(); it!=_sorted_icons.end(); ++it) { size_t tt_idx = 0;
while(tt_idx < icon_cnt) {
_tooltip.add(_hwnd, tt_idx++, rect); _tooltip.add(_hwnd, tt_idx++, rect);
rect.left += NOTIFYICON_DIST; rect.left += NOTIFYICON_DIST;

View file

@ -259,6 +259,9 @@ LRESULT CALLBACK Window::WindowWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPAR
case WM_NOTIFY: case WM_NOTIFY:
return pThis->Notify(wparam, (NMHDR*)lparam); return pThis->Notify(wparam, (NMHDR*)lparam);
case WM_NOTIFYFORMAT:
return NFR_CURRENT;
case WM_CREATE: case WM_CREATE:
return pThis->Init((LPCREATESTRUCT)lparam); return pThis->Init((LPCREATESTRUCT)lparam);
@ -331,6 +334,9 @@ LRESULT CALLBACK SubclassedWindow::SubclassedWndProc(HWND hwnd, UINT nmsg, WPARA
case WM_NOTIFY: case WM_NOTIFY:
return pThis->Notify(wparam, (NMHDR*)lparam); return pThis->Notify(wparam, (NMHDR*)lparam);
case WM_NOTIFYFORMAT:
return NFR_CURRENT;
case WM_CREATE: case WM_CREATE:
return pThis->Init((LPCREATESTRUCT)lparam); return pThis->Init((LPCREATESTRUCT)lparam);
@ -677,6 +683,9 @@ INT_PTR CALLBACK Window::DialogProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM
pThis->Notify(wparam, (NMHDR*)lparam); pThis->Notify(wparam, (NMHDR*)lparam);
return TRUE; // message has been processed return TRUE; // message has been processed
case WM_NOTIFYFORMAT:
return NFR_CURRENT;
case WM_NCDESTROY: case WM_NCDESTROY:
delete pThis; delete pThis;
return TRUE; // message has been processed return TRUE; // message has been processed
@ -1355,6 +1364,9 @@ INT_PTR CALLBACK PropSheetPageDlg::DialogProc(HWND hwnd, UINT nmsg, WPARAM wpara
pThis->Notify(wparam, (NMHDR*)lparam); pThis->Notify(wparam, (NMHDR*)lparam);
return TRUE; // message has been processed return TRUE; // message has been processed
case WM_NOTIFYFORMAT:
return NFR_CURRENT;
case WM_NCDESTROY: case WM_NCDESTROY:
delete pThis; delete pThis;
return TRUE; // message has been processed return TRUE; // message has been processed

View file

@ -138,6 +138,12 @@ protected:
static WindowSet s_dialogs; static WindowSet s_dialogs;
}; };
#ifdef UNICODE
#define NFR_CURRENT NFR_UNICODE
#else
#define NFR_CURRENT NFR_ANSI
#endif
#ifdef _MSC_VER #ifdef _MSC_VER
template<typename CLASS> struct GetWindowHelper template<typename CLASS> struct GetWindowHelper
@ -845,27 +851,40 @@ struct ToolTip : public WindowHandle
void add(HWND hparent, HWND htool, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0) void add(HWND hparent, HWND htool, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), TTF_SUBCLASS|TTF_IDISHWND/*|TTF_TRANSPARENT*/, hparent, (UINT)htool, sizeof(TOOLINFO), TTF_SUBCLASS|TTF_IDISHWND|TTF_TRANSPARENT, hparent, (UINT)htool,
{0,0,0,0}, 0, (LPTSTR)txt, lparam {0,0,0,0}, 0, (LPTSTR)txt, lparam
}; };
SendMessage(_hwnd, TTM_ADDTOOL, 0, (LPARAM)&ti); #ifdef UNICODE ///@todo Why is it neccesary to try both TTM_ADDTOOLW and TTM_ADDTOOLW ?!
if (!SendMessage(_hwnd, TTM_ADDTOOLW, 0, (LPARAM)&ti))
SendMessage(_hwnd, TTM_ADDTOOLA, 0, (LPARAM)&ti);
#else
if (!SendMessage(_hwnd, TTM_ADDTOOLA, 0, (LPARAM)&ti))
SendMessage(_hwnd, TTM_ADDTOOLW, 0, (LPARAM)&ti);
#endif
} }
void add(HWND hparent, UINT id, const RECT& rect, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0) void add(HWND hparent, UINT id, const RECT& rect, LPCTSTR txt=LPSTR_TEXTCALLBACK, LPARAM lparam=0)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), TTF_SUBCLASS/*|TTF_TRANSPARENT*/, hparent, id, sizeof(TOOLINFO), TTF_SUBCLASS|TTF_TRANSPARENT, hparent, id,
{rect.left,rect.top,rect.right,rect.bottom}, 0, (LPTSTR)txt, lparam {rect.left,rect.top,rect.right,rect.bottom}, 0, (LPTSTR)txt, lparam
}; };
SendMessage(_hwnd, TTM_ADDTOOL, 0, (LPARAM)&ti); #ifdef UNICODE
if (!SendMessage(_hwnd, TTM_ADDTOOLW, 0, (LPARAM)&ti))
SendMessage(_hwnd, TTM_ADDTOOLA, 0, (LPARAM)&ti);
#else
if (!SendMessage(_hwnd, TTM_ADDTOOLA, 0, (LPARAM)&ti))
SendMessage(_hwnd, TTM_ADDTOOLW, 0, (LPARAM)&ti);
#endif
} }
void remove(HWND hparent, HWND htool) void remove(HWND hparent, HWND htool)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), TTF_IDISHWND, hparent, (UINT)htool, {0,0,0,0}, 0, 0, 0 sizeof(TOOLINFO), TTF_IDISHWND, hparent, (UINT)htool,
{0,0,0,0}, 0, 0, 0
}; };
SendMessage(_hwnd, TTM_DELTOOL, 0, (LPARAM)&ti); SendMessage(_hwnd, TTM_DELTOOL, 0, (LPARAM)&ti);
@ -874,7 +893,8 @@ struct ToolTip : public WindowHandle
void remove(HWND hparent, UINT id) void remove(HWND hparent, UINT id)
{ {
TOOLINFO ti = { TOOLINFO ti = {
sizeof(TOOLINFO), 0, hparent, id, {0,0,0,0}, 0, 0, 0 sizeof(TOOLINFO), 0, hparent, id,
{0,0,0,0}, 0, 0, 0
}; };
SendMessage(_hwnd, TTM_DELTOOL, 0, (LPARAM)&ti); SendMessage(_hwnd, TTM_DELTOOL, 0, (LPARAM)&ti);