| #include "stdafx.h" |
| #include "PopUpWnd.h" |
| #include "resource.h" |
| #include "PocketPJDlg.h" |
| |
| #ifdef _DEBUG |
| #define new DEBUG_NEW |
| #undef THIS_FILE |
| static char THIS_FILE[] = __FILE__; |
| #endif |
| |
| #define IDC_BTN1 10 |
| #define IDC_BTN2 11 |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // CPopUpWnd |
| |
| CPopUpWnd::CPopUpWnd(CPocketPJDlg* pParent) |
| { |
| Create(pParent); |
| } |
| |
| CPopUpWnd::~CPopUpWnd() |
| { |
| DestroyWindow(); |
| } |
| |
| BOOL CPopUpWnd::Create(CPocketPJDlg* pParent) |
| { |
| BOOL bSuccess; |
| |
| m_ParentWnd = pParent; |
| |
| // Register window class |
| CString csClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, |
| 0, |
| CBrush(::GetSysColor(COLOR_BTNFACE))); |
| |
| // Create popup window |
| bSuccess = CreateEx(WS_EX_DLGMODALFRAME|WS_EX_TOPMOST, // Extended style |
| csClassName, // Classname |
| _T("PocketPJ"), // Title |
| WS_POPUP|WS_BORDER|WS_CAPTION, // style |
| 0,0, // position - updated soon. |
| 1,1, // Size - updated soon |
| pParent->GetSafeHwnd(), // handle to parent |
| 0, // No menu |
| NULL); |
| if (!bSuccess) |
| return FALSE; |
| |
| ShowWindow(SW_HIDE); |
| |
| // Now create the controls |
| CRect TempRect(0,0,10,10); |
| |
| /* |SS_LEFTNOWORDWRAP */ |
| bSuccess = m_Title1.Create(_T("Title1"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX, |
| TempRect, this, IDC_TITLE1); |
| if (!bSuccess) |
| return FALSE; |
| |
| bSuccess = m_Title2.Create(_T("Title2"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX, |
| TempRect, this, IDC_TITLE2); |
| if (!bSuccess) |
| return FALSE; |
| |
| bSuccess = m_Title3.Create(_T("Title3"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX, |
| TempRect, this, IDC_TITLE3); |
| if (!bSuccess) |
| return FALSE; |
| |
| bSuccess = m_Btn1.Create(_T("Button1"), |
| WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, |
| TempRect, this, IDC_BTN1); |
| if (!bSuccess) |
| return FALSE; |
| |
| bSuccess = m_Btn2.Create(_T("Button2"), |
| WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, |
| TempRect, this, IDC_BTN2); |
| if (!bSuccess) |
| return FALSE; |
| |
| CFont *ft1 = new CFont, |
| *ft2 = new CFont, |
| *ft3 = new CFont; |
| |
| |
| LOGFONT lf; |
| memset(&lf, 0, sizeof(LOGFONT)); |
| lf.lfHeight = 12; |
| lstrcpy(lf.lfFaceName, _T("Arial")); |
| VERIFY(ft1->CreateFontIndirect(&lf)); |
| VERIFY(ft3->CreateFontIndirect(&lf)); |
| |
| lf.lfHeight = 20; |
| VERIFY(ft2->CreateFontIndirect(&lf)); |
| |
| m_Title1.SetFont(ft1, TRUE); |
| m_Title2.SetFont(ft2, TRUE); |
| m_Title3.SetFont(ft3, TRUE); |
| |
| |
| SetWindowSize(); |
| |
| // Center and show window |
| CenterWindow(); |
| |
| Show(); |
| |
| return TRUE; |
| } |
| |
| void CPopUpWnd::SetContent(const CPopUpContent &content) |
| { |
| m_Title1.SetWindowText(content.m_Title1); |
| m_Title2.SetWindowText(content.m_Title2); |
| m_Title3.SetWindowText(content.m_Title3); |
| |
| if (content.m_Btn1 != "") { |
| m_Btn1.SetWindowText(content.m_Btn1); |
| m_Btn1.ShowWindow(SW_SHOW); |
| } else { |
| m_Btn1.ShowWindow(SW_HIDE); |
| } |
| |
| if (content.m_Btn2 != "") { |
| m_Btn2.SetWindowText(content.m_Btn2); |
| m_Btn2.ShowWindow(SW_SHOW); |
| } else { |
| m_Btn2.ShowWindow(SW_HIDE); |
| } |
| |
| UpdateWindow(); |
| ShowWindow(SW_SHOW); |
| } |
| |
| void CPopUpWnd::SetWindowSize(int width, int height) |
| { |
| enum { H1 = 16, H2 = 40, H3 = 16, S = 5, G = 10, BW=60, BH=20, BG=40}; |
| |
| CRect rootRect(0, 0, 320, 240); |
| int Y; |
| |
| MoveWindow((rootRect.Width() - width)/2, (rootRect.Height() - height)/2, |
| width, height); |
| |
| m_Title1.MoveWindow(10, Y=S, width-20, H1); |
| m_Title2.MoveWindow(10, Y+=H1+G, width-20, H2); |
| m_Title3.MoveWindow(10, Y+=H2+G, width-20, H3); |
| |
| m_Btn1.MoveWindow((width-2*BW-BG)/2, Y+=H3+G, BW, BH); |
| m_Btn2.MoveWindow((width-2*BW-BG)/2+BW+BG, Y, BW, BH); |
| } |
| |
| void CPopUpWnd::Hide() |
| { |
| if (!::IsWindow(GetSafeHwnd())) |
| return; |
| |
| if (IsWindowVisible()) |
| { |
| ShowWindow(SW_HIDE); |
| ModifyStyle(WS_VISIBLE, 0); |
| } |
| } |
| |
| void CPopUpWnd::Show() |
| { |
| if (!::IsWindow(GetSafeHwnd())) |
| return; |
| |
| ModifyStyle(0, WS_VISIBLE); |
| ShowWindow(SW_SHOWNA); |
| RedrawWindow(NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW); |
| } |
| |
| BEGIN_MESSAGE_MAP(CPopUpWnd, CWnd) |
| //{{AFX_MSG_MAP(CPopUpWnd) |
| ON_WM_ERASEBKGND() |
| //}}AFX_MSG_MAP |
| ON_BN_CLICKED(IDC_BTN1, OnCancel1) |
| ON_BN_CLICKED(IDC_BTN2, OnCancel2) |
| END_MESSAGE_MAP() |
| |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // CPopUpWnd message handlers |
| |
| BOOL CPopUpWnd::OnEraseBkgnd(CDC* pDC) |
| { |
| CBrush backBrush; |
| backBrush.CreateSolidBrush(RGB(255,255,255)); |
| CBrush* pOldBrush = pDC->SelectObject(&backBrush); |
| |
| CRect rect; |
| pDC->GetClipBox(&rect); // Erase the area needed |
| pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY); |
| pDC->SelectObject(pOldBrush); |
| |
| return TRUE; |
| } |
| |
| void CPopUpWnd::OnCancel1() |
| { |
| m_ParentWnd->OnPopUpButton(1); |
| } |
| |
| |
| void CPopUpWnd::OnCancel2() |
| { |
| m_ParentWnd->OnPopUpButton(2); |
| } |
| |
| |
| BOOL CPopUpWnd::DestroyWindow() |
| { |
| return CWnd::DestroyWindow(); |
| } |
| |
| void CPopUpWnd::PeekAndPump() |
| { |
| MSG msg; |
| while (::PeekMessage(&msg, NULL,0,0,PM_NOREMOVE)) |
| { |
| if (!AfxGetApp()->PumpMessage()) |
| { |
| ::PostQuitMessage(0); |
| return; |
| } |
| } |
| } |
| |