X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2432b92dd7a837db13d3938a56c1959decd03203..c4218a74033e3091a3566c9c6619809a00b53744:/src/msw/accel.cpp diff --git a/src/msw/accel.cpp b/src/msw/accel.cpp index 680ec4e770..0e86f39c36 100644 --- a/src/msw/accel.cpp +++ b/src/msw/accel.cpp @@ -26,23 +26,18 @@ #include "wx/window.h" #endif -#include "wx/msw/private.h" #include "wx/msw/accel.h" -#ifdef LoadAccelerators -#undef LoadAccelerators -#endif +#include "wx/msw/private.h" -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) -#endif class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData { friend class WXDLLEXPORT wxAcceleratorTable; public: - wxAcceleratorRefData(void); - ~wxAcceleratorRefData(void); + wxAcceleratorRefData(); + ~wxAcceleratorRefData(); inline HACCEL GetHACCEL() const { return m_hAccel; } protected: @@ -63,7 +58,7 @@ wxAcceleratorRefData::~wxAcceleratorRefData() if (m_hAccel) { // This function not available in WIN16 -#ifndef __WIN16__ +#if !defined(__WIN16__) && !defined(__TWIN32__) DestroyAcceleratorTable((HACCEL) m_hAccel); #endif } @@ -85,14 +80,14 @@ wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) m_refData = new wxAcceleratorRefData; HACCEL hAccel = -#ifdef __WIN32__ +#if defined(__WIN32__) && !defined(__TWIN32__) #ifdef UNICODE - ::LoadAcceleratorsW(wxGetInstance(), (const char *)resource); + ::LoadAcceleratorsW(wxGetInstance(), (const wxChar *)resource); #else ::LoadAcceleratorsA(wxGetInstance(), (const char *)resource); #endif #else - ::LoadAccelerators(wxGetInstance(), (const char *)resource); + ::LoadAccelerators(wxGetInstance(), (const wxChar *)resource); #endif M_ACCELDATA->m_hAccel = hAccel; M_ACCELDATA->m_ok = (hAccel != 0); @@ -101,10 +96,10 @@ wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) extern int wxCharCodeWXToMSW(int id, bool *isVirtual); // Create from an array +#if !defined(__WIN16__) && !defined(__TWIN32__) && !defined(__WXWINE__) wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { // Not available in WIN16 -#ifndef __WIN16__ m_refData = new wxAcceleratorRefData; ACCEL* arr = new ACCEL[n]; @@ -113,15 +108,25 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] { BYTE fVirt = 0; if (entries[i].m_flags & wxACCEL_ALT) + { fVirt |= FALT; + fVirt |= FVIRTKEY; + } if (entries[i].m_flags & wxACCEL_SHIFT) + { fVirt |= FSHIFT; + fVirt |= FVIRTKEY; + } if (entries[i].m_flags & wxACCEL_CTRL) + { fVirt |= FCONTROL; + fVirt |= FVIRTKEY; + } bool isVirtual; WORD key = wxCharCodeWXToMSW(entries[i].m_keyCode, & isVirtual); - fVirt |= FVIRTKEY; + if (isVirtual) + fVirt |= FVIRTKEY; WORD cmd = entries[i].m_command; @@ -134,10 +139,17 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] delete[] arr; M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); -#endif } +#else // Win16 +wxAcceleratorTable::wxAcceleratorTable(int WXUNUSED(n), const wxAcceleratorEntry WXUNUSED(entries)[]) +{ + // No, we simply gracefully degrade; we don't expect the + // developer to pepper their code with #ifdefs just for this. + // wxFAIL_MSG("not implemented"); +} +#endif // Win32/16 -bool wxAcceleratorTable::Ok(void) const +bool wxAcceleratorTable::Ok() const { return (M_ACCELDATA && (M_ACCELDATA->m_ok)); } @@ -157,3 +169,9 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const return (WXHACCEL) M_ACCELDATA->m_hAccel; } +bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const +{ + MSG *msg = (MSG *)wxmsg; + return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); +} +