summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pocketpj/PopUpWnd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip-apps/src/pocketpj/PopUpWnd.cpp')
-rw-r--r--pjsip-apps/src/pocketpj/PopUpWnd.cpp235
1 files changed, 235 insertions, 0 deletions
diff --git a/pjsip-apps/src/pocketpj/PopUpWnd.cpp b/pjsip-apps/src/pocketpj/PopUpWnd.cpp
new file mode 100644
index 0000000..1f1654f
--- /dev/null
+++ b/pjsip-apps/src/pocketpj/PopUpWnd.cpp
@@ -0,0 +1,235 @@
+#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;
+ }
+ }
+}
+