Files
wxWidgets/src/os2/nativdlg.cpp
Dimitri Schoolwerth 80fdcdb90e No changes, synchronised source names that appear commented at the top of files with the actual path to the files.
Fixed commented names (path, filename, and extension) of files in include/ and src/. Prepended the names in src/ with "src/" everywhere, while starting those in include/wx/ with "wx/".

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67254 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-20 00:14:35 +00:00

291 lines
7.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/os2/nativdlg.cpp
// Purpose: Native dialog loading code (part of wxWindow)
// Author: David Webster
// Modified by:
// Created: 10/12/99
// RCS-ID: $Id$
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// declarations
// ===========================================================================
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/wx.h"
#endif
#include "wx/os2/private.h"
#include "wx/spinbutt.h"
// ---------------------------------------------------------------------------
// global functions
// ---------------------------------------------------------------------------
extern wxWindow* wxWndHook;
extern MRESULT EXPENTRY wxDlgProc( HWND hWnd
,UINT message
,MPARAM wParam
,MPARAM lParam
);
// ===========================================================================
// implementation
// ===========================================================================
bool wxWindow::LoadNativeDialog (
wxWindow* pParent
, wxWindowID& vId
)
{
wxWindow* pChild = NULL;
HWND hWndOwner;
HWND hWndNext = NULLHANDLE;
HENUM hEnum;
if (pParent)
hWndOwner = GetHwndOf(pParent);
else
hWndOwner = HWND_DESKTOP;
m_windowId = vId;
wxWndHook = this;
m_hWnd = ::WinLoadDlg( HWND_DESKTOP
,hWndOwner
,(PFNWP)wxDlgProc
,NULL
,(ULONG)131 // Caption dialog from the resource file
,(PVOID)this
);
wxWndHook = NULL;
if ( !m_hWnd )
return FALSE;
SubclassWin(GetHWND());
if (pParent)
pParent->AddChild(this);
else
wxTopLevelWindows.Append(this);
//
// Enumerate the children
//
hEnum = ::WinBeginEnumWindows(GetHwndOf(pParent));
while ((hWndNext = ::WinGetNextWindow(hEnum)) != NULLHANDLE)
pChild = CreateWindowFromHWND( this
,(WXHWND)hWndNext
);
::WinEndEnumWindows(hEnum);
return TRUE;
} // end of wxWindow::LoadNativeDialog
bool wxWindow::LoadNativeDialog (
wxWindow* pParent
, const wxString& rsName
)
{
HWND hWndOwner;
if (pParent)
hWndOwner = GetHwndOf(pParent);
else
hWndOwner = HWND_DESKTOP;
SetName(rsName);
wxWndHook = this;
m_hWnd = ::WinLoadDlg( HWND_DESKTOP
,hWndOwner
,(PFNWP)wxDlgProc
,NULL
,(ULONG)131 // Caption dialog from the resource file
,(PVOID)this
);
wxWndHook = NULL;
if (!m_hWnd)
return FALSE;
SubclassWin(GetHWND());
if (pParent)
pParent->AddChild(this);
else
wxTopLevelWindows.Append(this);
return TRUE;
} // end of wxWindow::LoadNativeDialog
// ---------------------------------------------------------------------------
// look for child by id
// ---------------------------------------------------------------------------
wxWindow* wxWindow::GetWindowChild1 (
wxWindowID vId
)
{
if (m_windowId == vId)
return this;
wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
while (node)
{
wxWindow* pChild = node->GetData();
wxWindow* pWin = pChild->GetWindowChild1(vId);
if (pWin)
return pWin;
node = node->GetNext();
}
return NULL;
} // end of wxWindow::GetWindowChild1
wxWindow* wxWindow::GetWindowChild (
wxWindowID vId
)
{
wxWindow* pWin = GetWindowChild1(vId);
if (!pWin)
{
HWND hWnd = 0; // TODO: ::GetDlgItem((HWND) GetHWND(), id);
if (hWnd)
{
wxWindow* pChild = CreateWindowFromHWND( this
,(WXHWND)hWnd
);
if (pChild)
{
pChild->AddChild(this);
return pChild;
}
}
}
return NULL;
} // end of wxWindow::GetWindowChild
// ---------------------------------------------------------------------------
// create wxWin window from a native HWND
// ---------------------------------------------------------------------------
wxWindow* wxWindow::CreateWindowFromHWND (
wxWindow* pParent
, WXHWND hWnd
)
{
wxString sStr(wxGetWindowClass(hWnd));
long lId = wxGetWindowId(hWnd);
long lStyle = ::WinQueryWindowULong((HWND)hWnd
,QWL_STYLE
);
wxWindow* pWin = NULL;
sStr.UpperCase();
if (sStr == wxT("BUTTON"))
{
if (lStyle == BS_AUTOCHECKBOX)
{
pWin = new wxCheckBox;
}
else if (lStyle == BS_AUTORADIOBUTTON)
{
pWin = new wxRadioButton;
}
else if (lStyle & BS_BITMAP || lStyle == BS_USERBUTTON)
{
pWin = new wxBitmapButton;
}
else if (lStyle == BS_PUSHBUTTON)
{
pWin = new wxButton;
}
else if (lStyle == SS_GROUPBOX)
{
pWin = new wxStaticBox;
}
else
{
wxLogError(wxT("Don't know what kind of button this is: id = %ld"),
lId);
}
}
else if (sStr == wxT("COMBOBOX"))
{
pWin = new wxComboBox;
}
else if (sStr == wxT("EDIT"))
{
pWin = new wxTextCtrl;
}
else if (sStr == wxT("LISTBOX"))
{
pWin = new wxListBox;
}
else if (sStr == wxT("SCROLLBAR"))
{
pWin = new wxScrollBar;
}
else if (sStr == wxT("MSCTLS_UPDOWN32"))
{
pWin = new wxSpinButton;
}
else if (sStr == wxT("MSCTLS_TRACKBAR32"))
{
pWin = new wxSlider;
}
else if (sStr == wxT("STATIC"))
{
if (lStyle == SS_TEXT)
pWin = new wxStaticText;
else if (lStyle == SS_ICON)
{
pWin = new wxStaticBitmap;
}
}
else
{
wxString sMsg(wxT("Don't know how to convert from Windows class "));
sMsg += sStr;
wxLogError(sMsg);
}
if (pWin)
{
pParent->AddChild(pWin);
pWin->SetEventHandler(pWin);
pWin->SetHWND(hWnd);
pWin->SetId(lId);
pWin->SubclassWin(hWnd);
pWin->AdoptAttributesFromHWND();
pWin->SetupColours();
return pWin;
}
else
return NULL;
} // end of wxWindow::CreateWindowFromHWND
//
// Make sure the window style (etc.) reflects the HWND style (roughly)
//
void wxWindow::AdoptAttributesFromHWND()
{
// Does nothing under OS/2
} // end of wxWindow::AdoptAttributesFromHWND