Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4342)

Unified Diff: chrome/client/clientDlg.cpp

Issue 10973: Test the feasibility of turning Chrome into a multi-process ActiveX control Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/client/clientDlg.h ('k') | chrome/client/res/client.ico » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/client/clientDlg.cpp
===================================================================
--- chrome/client/clientDlg.cpp (revision 0)
+++ chrome/client/clientDlg.cpp (revision 0)
@@ -0,0 +1,138 @@
+// clientDlg.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "client.h"
+#include "clientDlg.h"
+#include <process.h>
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// CclientDlg dialog
+
+
+
+
+CclientDlg::CclientDlg(CWnd* pParent /*=NULL*/)
+ : CDialog(CclientDlg::IDD, pParent)
+{
+ m_hProc = 0;
+ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
+}
+
+void CclientDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+}
+
+BEGIN_MESSAGE_MAP(CclientDlg, CDialog)
+ ON_WM_PAINT()
+ ON_WM_QUERYDRAGICON()
+ ON_WM_DESTROY()
+ ON_COMMAND(IDC_BUTTON1, OnEmbedChrome)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+// CclientDlg message handlers
+
+BOOL CclientDlg::OnInitDialog()
+{
+ CDialog::OnInitDialog();
+
+ // Set the icon for this dialog. The framework does this automatically
+ // when the application's main window is not a dialog
+ SetIcon(m_hIcon, TRUE); // Set big icon
+ SetIcon(m_hIcon, FALSE); // Set small icon
+
+ // Build command-line arguments
+ CRect rect;
+ CWnd *pWnd = GetDlgItem(IDC_STATIC);
+ pWnd->GetWindowRect(&rect);
+
+ CString str;
+ str.Format(_T("--embedded --embedded-settings=%d,%d,%d,%d,%d,http://www.google.com"),
+ m_hWnd, rect.left, rect.top, rect.Width(), rect.Height());
+ GetDlgItem(IDC_EDIT1)->SetWindowText(str);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+}
+
+// If you add a minimize button to your dialog, you will need the code below
+// to draw the icon. For MFC applications using the document/view model,
+// this is automatically done for you by the framework.
+
+void CclientDlg::OnPaint()
+{
+ if (IsIconic())
+ {
+ CPaintDC dc(this); // device context for painting
+
+ SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
+
+ // Center icon in client rectangle
+ int cxIcon = GetSystemMetrics(SM_CXICON);
+ int cyIcon = GetSystemMetrics(SM_CYICON);
+ CRect rect;
+ GetClientRect(&rect);
+ int x = (rect.Width() - cxIcon + 1) / 2;
+ int y = (rect.Height() - cyIcon + 1) / 2;
+
+ // Draw the icon
+ dc.DrawIcon(x, y, m_hIcon);
+ }
+ else
+ {
+ CDialog::OnPaint();
+ }
+}
+
+// The system calls this function to obtain the cursor to display while the user drags
+// the minimized window.
+HCURSOR CclientDlg::OnQueryDragIcon()
+{
+ return static_cast<HCURSOR>(m_hIcon);
+}
+
+void CclientDlg::OnDestroy()
+{
+ if(m_hProc > 0)
+ ::TerminateProcess((HANDLE)m_hProc, 0);
+}
+
+void CclientDlg::OnEmbedChrome()
+{
+ CWnd *pWnd = GetDlgItem(IDC_BUTTON1);
+ pWnd->ModifyStyle(0, WS_DISABLED);
+ pWnd->Invalidate(FALSE);
+ ((CEdit*)GetDlgItem(IDC_EDIT1))->SetReadOnly();
+
+ CString str;
+ GetDlgItem(IDC_EDIT1)->GetWindowText(str);
+
+ CStringArray paramArray;
+
+ wchar_t* tok = wcstok((LPTSTR)(LPCTSTR)str, L" ");
+ while(tok)
+ {
+ paramArray.Add(tok);
+ tok = wcstok(NULL, L" ");
+ }
+
+ int ct = (int)paramArray.GetCount();
+ wchar_t **argv = new wchar_t*[ct+2];
+ argv[0] = _T("chrome.exe");
+ for(int i = 0; i < ct; i++)
+ argv[i+1] = (LPTSTR)(LPCTSTR)paramArray.GetAt(i);
+ argv[ct+1] = NULL;
+
+ intptr_t res = _wspawnvp(_P_NOWAIT, _T("..\\Debug\\chrome.exe"), argv);
+ if(res == -1)
+ AfxMessageBox(_T("Server spawn failed"));
+ else
+ m_hProc = (HANDLE)res;
+
+ delete [] argv;
+}
« no previous file with comments | « chrome/client/clientDlg.h ('k') | chrome/client/res/client.ico » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698