Dec 15, 2005
ちょっと気が利くアドオンクラス、CCenterredWindow
ATL::CWindow クラスの CenterWindow(parent) は、parent に自分の親ウィンドウを指定しても、その親ウィンドウではなくオーナーウィンドウの位置に対してセンタリングを行います。
でもそうすると、ActiveXコントロールでの表示などでちと妙なことになりかねません。
ではCenterWindow()を使わずに、WM_CREATEまたはWM_INITDIALOGにて自前でセンタリングすればよいかといえば、その時点で既にポップアップウィンドウの親はオーナーウィンドウにすり替えられてしまっているのでムリです。
↓のアドオンクラスを使えば、そんな時に所与の目的を達成できます。
template
{
private:
CPoint center;
public:
void DoCenterring(BOOL bRedraw = TRUE)
{
CRect rect;
static_cast
rect.MoveToXY(center.x - rect.Width() / 2, center.y - rect.Height() / 2);
static_cast
}
protected:
void InitCenterring(HWND parent)
{
CRect rect;
::GetWindowRect(parent, rect);
center = rect.CenterPoint();
}
};
使用例は以下のとおり。
class CHogeDialog : public CDialogImpl
{
:
LRESULT OnInitDialog(HWND, LPARAM)
{
:
DoCenterring();
return 1;
}
INT_PTR DoModal(HWND parent = ::GetActiveWindow())
{
InitCenterring(parent);
return CDialogImpl
}
};
Trackback
No Trackbacks
Track from Your Website
http://blog.izumichan.com/trackback/tb.php?id=120
Comment
No Comments