99 lines
2.2 KiB
C++
99 lines
2.2 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
// Control.cpp: Base control class.
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wincontrol.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: Create
|
|
// Desc: Create a new instance of the control.
|
|
//
|
|
// create: Creation parameters.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
HRESULT Control::Create(const CREATESTRUCT& create)
|
|
{
|
|
if (m_hwnd != NULL)
|
|
{
|
|
// The control was already created.
|
|
return E_FAIL;
|
|
}
|
|
|
|
if (create.hwndParent == NULL)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
HINSTANCE hinst = create.hInstance;
|
|
|
|
if (hinst == NULL)
|
|
{
|
|
hinst = GetInstance();
|
|
}
|
|
|
|
if (hinst == NULL)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
|
|
HWND hwnd = CreateWindowEx(
|
|
create.dwExStyle, create.lpszClass, create.lpszName,
|
|
create.style | WS_CHILD | WS_VISIBLE,
|
|
create.x, create.y, create.cx, create.cy, create.hwndParent, create.hMenu,
|
|
hinst, create.lpCreateParams);
|
|
|
|
if (hwnd== 0)
|
|
{
|
|
return __HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
SetWindow(hwnd);
|
|
return S_OK;
|
|
};
|
|
|
|
|
|
CreateStruct::CreateStruct()
|
|
{
|
|
ZeroMemory(this, sizeof(*this));
|
|
}
|
|
|
|
void CreateStruct::SetBoundingRect(const Rect& rc)
|
|
{
|
|
x = rc.left;
|
|
y = rc.top;
|
|
cx = rc.right - x;
|
|
cy = rc.bottom - y;
|
|
}
|
|
|
|
|
|
|
|
|
|
HINSTANCE GetInstance()
|
|
{
|
|
return (HINSTANCE)GetModuleHandle(NULL);
|
|
}
|
|
|
|
|
|
|
|
// SetBitmapImg - Set a bitmap image on a window
|
|
HBITMAP SetBitmapImg(HINSTANCE hinst, WORD nImgId, HWND hwnd)
|
|
{
|
|
HBITMAP hBitmap = LoadBitmap(hinst, MAKEINTRESOURCE(nImgId));
|
|
if (hBitmap)
|
|
{
|
|
SendMessage(hwnd, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
|
|
// BM_SETIMAGE returns the handle to the _previous_ bitmap.
|
|
return hBitmap;
|
|
}
|
|
return 0;
|
|
}
|