removed files with empty stubs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19980 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,92 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
|
||||||
// File: taskbar.h
|
|
||||||
// Purpose: Defines wxTaskBarIcon class for manipulating icons on the
|
|
||||||
// task bar. Optional.
|
|
||||||
// Author: David Webster
|
|
||||||
// Modified by:
|
|
||||||
// Created: 10/17/99
|
|
||||||
// RCS-ID: $Id$
|
|
||||||
// Copyright: (c) David Webster
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef _WX_TASKBAR_H_
|
|
||||||
#define _WX_TASKBAR_H_
|
|
||||||
|
|
||||||
#include <wx/event.h>
|
|
||||||
#include <wx/list.h>
|
|
||||||
#include <wx/icon.h>
|
|
||||||
|
|
||||||
class WXDLLEXPORT wxTaskBarIcon: public wxEvtHandler {
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxTaskBarIcon)
|
|
||||||
public:
|
|
||||||
wxTaskBarIcon(void);
|
|
||||||
virtual ~wxTaskBarIcon(void);
|
|
||||||
|
|
||||||
// Accessors
|
|
||||||
inline WXHWND GetHWND() const { return m_hWnd; }
|
|
||||||
inline bool IsOK() const { return (m_hWnd != 0) ; }
|
|
||||||
inline bool IsIconInstalled() const { return m_iconAdded; }
|
|
||||||
|
|
||||||
// Operations
|
|
||||||
bool SetIcon(const wxIcon& icon, const wxString& tooltip = "");
|
|
||||||
bool RemoveIcon(void);
|
|
||||||
bool PopupMenu(wxMenu *menu); //, int x, int y);
|
|
||||||
|
|
||||||
// Overridables
|
|
||||||
virtual void OnMouseMove(wxEvent&);
|
|
||||||
virtual void OnLButtonDown(wxEvent&);
|
|
||||||
virtual void OnLButtonUp(wxEvent&);
|
|
||||||
virtual void OnRButtonDown(wxEvent&);
|
|
||||||
virtual void OnRButtonUp(wxEvent&);
|
|
||||||
virtual void OnLButtonDClick(wxEvent&);
|
|
||||||
virtual void OnRButtonDClick(wxEvent&);
|
|
||||||
|
|
||||||
// Implementation
|
|
||||||
static wxTaskBarIcon* FindObjectForHWND(WXHWND hWnd);
|
|
||||||
static void AddObject(wxTaskBarIcon* obj);
|
|
||||||
static void RemoveObject(wxTaskBarIcon* obj);
|
|
||||||
static bool RegisterWindowClass();
|
|
||||||
static WXHWND CreateTaskBarWindow();
|
|
||||||
MRESULT WindowProc( WXHWND hWnd, UINT msg, MPARAM wParam, MPARAM lParam );
|
|
||||||
|
|
||||||
// Data members
|
|
||||||
protected:
|
|
||||||
WXHWND m_hWnd;
|
|
||||||
bool m_iconAdded;
|
|
||||||
static wxList sm_taskBarIcons;
|
|
||||||
static bool sm_registeredClass;
|
|
||||||
static unsigned int sm_taskbarMsg;
|
|
||||||
|
|
||||||
// non-virtual default event handlers to forward events to the virtuals
|
|
||||||
void _OnMouseMove(wxEvent&);
|
|
||||||
void _OnLButtonDown(wxEvent&);
|
|
||||||
void _OnLButtonUp(wxEvent&);
|
|
||||||
void _OnRButtonDown(wxEvent&);
|
|
||||||
void _OnRButtonUp(wxEvent&);
|
|
||||||
void _OnLButtonDClick(wxEvent&);
|
|
||||||
void _OnRButtonDClick(wxEvent&);
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
const wxEventType wxEVT_TASKBAR_MOVE = wxEVT_FIRST + 1550;
|
|
||||||
const wxEventType wxEVT_TASKBAR_LEFT_DOWN = wxEVT_FIRST + 1551;
|
|
||||||
const wxEventType wxEVT_TASKBAR_LEFT_UP = wxEVT_FIRST + 1552;
|
|
||||||
const wxEventType wxEVT_TASKBAR_RIGHT_DOWN = wxEVT_FIRST + 1553;
|
|
||||||
const wxEventType wxEVT_TASKBAR_RIGHT_UP = wxEVT_FIRST + 1554;
|
|
||||||
const wxEventType wxEVT_TASKBAR_LEFT_DCLICK = wxEVT_FIRST + 1555;
|
|
||||||
const wxEventType wxEVT_TASKBAR_RIGHT_DCLICK = wxEVT_FIRST + 1556;
|
|
||||||
|
|
||||||
#define EVT_TASKBAR_MOVE(fn) wxEventTableEntry(wxEVT_TASKBAR_MOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_LEFT_DOWN(fn) wxEventTableEntry(wxEVT_TASKBAR_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_LEFT_UP(fn) wxEventTableEntry(wxEVT_TASKBAR_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_RIGHT_DOWN(fn) wxEventTableEntry(wxEVT_TASKBAR_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_RIGHT_UP(fn) wxEventTableEntry(wxEVT_TASKBAR_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_LEFT_DCLICK(fn) wxEventTableEntry(wxEVT_TASKBAR_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
#define EVT_TASKBAR_RIGHT_DCLICK(fn) wxEventTableEntry(wxEVT_TASKBAR_RIGHT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// _TASKBAR_H_
|
|
||||||
|
|
@@ -1,371 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
|
||||||
// File: taskbar.cpp
|
|
||||||
// Purpose: Implements wxTaskBarIcon class for manipulating icons on
|
|
||||||
// the task bar. Optional.
|
|
||||||
// Author: David Webster
|
|
||||||
// Modified by:
|
|
||||||
// Created: 10/17/99
|
|
||||||
// RCS-ID: $Id$
|
|
||||||
// Copyright: (c) David Webster
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx.h".
|
|
||||||
#include "wx/wxprec.h"
|
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
|
||||||
#include "wx/defs.h"
|
|
||||||
#include "wx/window.h"
|
|
||||||
#include "wx/frame.h"
|
|
||||||
#include "wx/utils.h"
|
|
||||||
#include "wx/menu.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define INCL_PM
|
|
||||||
#include <os2.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <wx/os2/taskbar.h>
|
|
||||||
#include <wx/os2/private.h>
|
|
||||||
|
|
||||||
MRESULT wxTaskBarIconWindowProc( HWND hWnd, UINT msg, MPARAM wParam, MPARAM lParam );
|
|
||||||
|
|
||||||
wxChar *wxTaskBarWindowClass = wxT("wxTaskBarWindowClass");
|
|
||||||
|
|
||||||
wxList wxTaskBarIcon::sm_taskBarIcons;
|
|
||||||
bool wxTaskBarIcon::sm_registeredClass = FALSE;
|
|
||||||
UINT wxTaskBarIcon::sm_taskbarMsg = 0;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxTaskBarIcon, wxEvtHandler)
|
|
||||||
EVT_TASKBAR_MOVE (wxTaskBarIcon::_OnMouseMove)
|
|
||||||
EVT_TASKBAR_LEFT_DOWN (wxTaskBarIcon::_OnLButtonDown)
|
|
||||||
EVT_TASKBAR_LEFT_UP (wxTaskBarIcon::_OnLButtonUp)
|
|
||||||
EVT_TASKBAR_RIGHT_DOWN (wxTaskBarIcon::_OnRButtonDown)
|
|
||||||
EVT_TASKBAR_RIGHT_UP (wxTaskBarIcon::_OnRButtonUp)
|
|
||||||
EVT_TASKBAR_LEFT_DCLICK (wxTaskBarIcon::_OnLButtonDClick)
|
|
||||||
EVT_TASKBAR_RIGHT_DCLICK (wxTaskBarIcon::_OnRButtonDClick)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIcon, wxEvtHandler)
|
|
||||||
|
|
||||||
|
|
||||||
wxTaskBarIcon::wxTaskBarIcon(void)
|
|
||||||
{
|
|
||||||
m_hWnd = 0;
|
|
||||||
m_iconAdded = FALSE;
|
|
||||||
|
|
||||||
AddObject(this);
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
if (RegisterWindowClass())
|
|
||||||
m_hWnd = CreateTaskBarWindow();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
wxTaskBarIcon::~wxTaskBarIcon(void)
|
|
||||||
{
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
RemoveObject(this);
|
|
||||||
|
|
||||||
if (m_iconAdded)
|
|
||||||
{
|
|
||||||
RemoveIcon();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_hWnd)
|
|
||||||
{
|
|
||||||
::DestroyWindow((HWND) m_hWnd);
|
|
||||||
m_hWnd = 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
// Operations
|
|
||||||
bool wxTaskBarIcon::SetIcon(const wxIcon& icon, const wxString& tooltip)
|
|
||||||
{
|
|
||||||
if (!IsOK())
|
|
||||||
return FALSE;
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
NOTIFYICONDATA notifyData;
|
|
||||||
|
|
||||||
memset(¬ifyData, 0, sizeof(notifyData));
|
|
||||||
notifyData.cbSize = sizeof(notifyData);
|
|
||||||
notifyData.hWnd = (HWND) m_hWnd;
|
|
||||||
notifyData.uCallbackMessage = sm_taskbarMsg;
|
|
||||||
notifyData.uFlags = NIF_MESSAGE ;
|
|
||||||
if (icon.Ok())
|
|
||||||
{
|
|
||||||
notifyData.uFlags |= NIF_ICON;
|
|
||||||
notifyData.hIcon = (HICON) icon.GetHICON();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (((const wxChar*) tooltip != NULL) && (tooltip != wxT("")))
|
|
||||||
{
|
|
||||||
notifyData.uFlags |= NIF_TIP ;
|
|
||||||
lstrcpyn(notifyData.szTip, WXSTRINGCAST tooltip, sizeof(notifyData.szTip));
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyData.uID = 99;
|
|
||||||
|
|
||||||
if (m_iconAdded)
|
|
||||||
return (Shell_NotifyIcon(NIM_MODIFY, & notifyData) != 0);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_iconAdded = (Shell_NotifyIcon(NIM_ADD, & notifyData) != 0);
|
|
||||||
return m_iconAdded;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxTaskBarIcon::RemoveIcon(void)
|
|
||||||
{
|
|
||||||
if (!m_iconAdded)
|
|
||||||
return FALSE;
|
|
||||||
//TODO:
|
|
||||||
/*
|
|
||||||
NOTIFYICONDATA notifyData;
|
|
||||||
|
|
||||||
memset(¬ifyData, 0, sizeof(notifyData));
|
|
||||||
notifyData.cbSize = sizeof(notifyData);
|
|
||||||
notifyData.hWnd = (HWND) m_hWnd;
|
|
||||||
notifyData.uCallbackMessage = sm_taskbarMsg;
|
|
||||||
notifyData.uFlags = NIF_MESSAGE;
|
|
||||||
notifyData.hIcon = 0 ; // hIcon;
|
|
||||||
notifyData.uID = 99;
|
|
||||||
m_iconAdded = FALSE;
|
|
||||||
|
|
||||||
return (Shell_NotifyIcon(NIM_DELETE, & notifyData) != 0);
|
|
||||||
*/
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxTaskBarIcon::PopupMenu(wxMenu *menu) //, int x, int y);
|
|
||||||
{
|
|
||||||
// OK, so I know this isn't thread-friendly, but
|
|
||||||
// what to do? We need this check.
|
|
||||||
|
|
||||||
static bool s_inPopup = FALSE;
|
|
||||||
|
|
||||||
if (s_inPopup)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
s_inPopup = TRUE;
|
|
||||||
|
|
||||||
bool rval = FALSE;
|
|
||||||
wxWindow* win;
|
|
||||||
int x, y;
|
|
||||||
wxGetMousePosition(&x, &y);
|
|
||||||
|
|
||||||
// is wxFrame the best window type to use???
|
|
||||||
win = new wxFrame(NULL, -1, "", wxPoint(x,y), wxSize(-1,-1), 0);
|
|
||||||
win->PushEventHandler(this);
|
|
||||||
|
|
||||||
// Remove from record of top-level windows, or will confuse wxWindows
|
|
||||||
// if we try to exit right now.
|
|
||||||
wxTopLevelWindows.DeleteObject(win);
|
|
||||||
|
|
||||||
menu->UpdateUI();
|
|
||||||
|
|
||||||
rval = win->PopupMenu(menu, 0, 0);
|
|
||||||
|
|
||||||
win->PopEventHandler(FALSE);
|
|
||||||
win->Destroy();
|
|
||||||
delete win;
|
|
||||||
|
|
||||||
s_inPopup = FALSE;
|
|
||||||
|
|
||||||
return rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Overridables
|
|
||||||
void wxTaskBarIcon::OnMouseMove(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnLButtonDown(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnLButtonUp(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnRButtonDown(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnRButtonUp(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnLButtonDClick(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::OnRButtonDClick(wxEvent&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::_OnMouseMove(wxEvent& e) { OnMouseMove(e); }
|
|
||||||
void wxTaskBarIcon::_OnLButtonDown(wxEvent& e) { OnLButtonDown(e); }
|
|
||||||
void wxTaskBarIcon::_OnLButtonUp(wxEvent& e) { OnLButtonUp(e); }
|
|
||||||
void wxTaskBarIcon::_OnRButtonDown(wxEvent& e) { OnRButtonDown(e); }
|
|
||||||
void wxTaskBarIcon::_OnRButtonUp(wxEvent& e) { OnRButtonUp(e); }
|
|
||||||
void wxTaskBarIcon::_OnLButtonDClick(wxEvent& e) { OnLButtonDClick(e); }
|
|
||||||
void wxTaskBarIcon::_OnRButtonDClick(wxEvent& e) { OnRButtonDClick(e); }
|
|
||||||
|
|
||||||
|
|
||||||
wxTaskBarIcon* wxTaskBarIcon::FindObjectForHWND(WXHWND hWnd)
|
|
||||||
{
|
|
||||||
wxNode*node = sm_taskBarIcons.First();
|
|
||||||
while (node)
|
|
||||||
{
|
|
||||||
wxTaskBarIcon* obj = (wxTaskBarIcon*) node->Data();
|
|
||||||
if (obj->GetHWND() == hWnd)
|
|
||||||
return obj;
|
|
||||||
node = node->Next();
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::AddObject(wxTaskBarIcon* obj)
|
|
||||||
{
|
|
||||||
sm_taskBarIcons.Append(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxTaskBarIcon::RemoveObject(wxTaskBarIcon* obj)
|
|
||||||
{
|
|
||||||
sm_taskBarIcons.DeleteObject(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxTaskBarIcon::RegisterWindowClass()
|
|
||||||
{
|
|
||||||
if (sm_registeredClass)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
// Also register the taskbar message here
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
sm_taskbarMsg = ::RegisterWindowMessage(wxT("wxTaskBarIconMessage"));
|
|
||||||
|
|
||||||
WNDCLASS wc;
|
|
||||||
bool rc;
|
|
||||||
|
|
||||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
|
||||||
|
|
||||||
//
|
|
||||||
// set up and register window class
|
|
||||||
//
|
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
|
||||||
wc.lpfnWndProc = (WNDPROC) wxTaskBarIconWindowProc;
|
|
||||||
wc.cbClsExtra = 0;
|
|
||||||
wc.cbWndExtra = 0;
|
|
||||||
wc.hInstance = hInstance;
|
|
||||||
wc.hIcon = 0;
|
|
||||||
wc.hCursor = 0;
|
|
||||||
wc.hbrBackground = 0;
|
|
||||||
wc.lpszMenuName = NULL;
|
|
||||||
wc.lpszClassName = wxTaskBarWindowClass ;
|
|
||||||
rc = (::RegisterClass( &wc ) != 0);
|
|
||||||
|
|
||||||
sm_registeredClass = (rc != 0);
|
|
||||||
|
|
||||||
return( (rc != 0) );
|
|
||||||
*/
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
WXHWND wxTaskBarIcon::CreateTaskBarWindow()
|
|
||||||
{
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
|
||||||
|
|
||||||
HWND hWnd = CreateWindowEx (0, wxTaskBarWindowClass,
|
|
||||||
wxT("wxTaskBarWindow"),
|
|
||||||
WS_OVERLAPPED,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
10,
|
|
||||||
10,
|
|
||||||
NULL,
|
|
||||||
(HMENU) 0,
|
|
||||||
hInstance,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
return (WXHWND) hWnd;
|
|
||||||
*/
|
|
||||||
return (WXHWND)0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MRESULT wxTaskBarIcon::WindowProc( WXHWND hWnd, UINT msg, MPARAM wParam, MPARAM lParam )
|
|
||||||
{
|
|
||||||
wxEventType eventType = 0;
|
|
||||||
// TODO:
|
|
||||||
/*
|
|
||||||
if (msg != sm_taskbarMsg)
|
|
||||||
return DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
|
||||||
|
|
||||||
switch (lParam)
|
|
||||||
{
|
|
||||||
case WM_LBUTTONDOWN:
|
|
||||||
eventType = wxEVT_TASKBAR_LEFT_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
eventType = wxEVT_TASKBAR_LEFT_UP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_RBUTTONDOWN:
|
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_UP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
eventType = wxEVT_TASKBAR_LEFT_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_RBUTTONDBLCLK:
|
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
|
||||||
eventType = wxEVT_TASKBAR_MOVE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (eventType)
|
|
||||||
{
|
|
||||||
wxEvent event;
|
|
||||||
event.SetEventType(eventType);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
|
|
||||||
ProcessEvent(event);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MRESULT wxTaskBarIconWindowProc(
|
|
||||||
HWND hWnd
|
|
||||||
, UINT msg
|
|
||||||
, MPARAM wParam
|
|
||||||
, MPARAM lParam
|
|
||||||
)
|
|
||||||
{
|
|
||||||
wxTaskBarIcon* obj = wxTaskBarIcon::FindObjectForHWND((WXHWND) hWnd);
|
|
||||||
if (obj)
|
|
||||||
return obj->WindowProc((WXHWND) hWnd, msg, wParam, lParam);
|
|
||||||
else
|
|
||||||
return (MRESULT)0;
|
|
||||||
// return DefWindowProc(hWnd, msg, wParam, lParam);
|
|
||||||
}
|
|
||||||
|
|
Reference in New Issue
Block a user