diff --git a/Source/Project64/Multilanguage/LanguageSelector.cpp b/Source/Project64/Multilanguage/LanguageSelector.cpp
deleted file mode 100644
index aec05ea56..000000000
--- a/Source/Project64/Multilanguage/LanguageSelector.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/****************************************************************************
-* *
-* Project64 - A Nintendo 64 emulator. *
-* http://www.pj64-emu.com/ *
-* Copyright (C) 2012 Project64. All rights reserved. *
-* *
-* License: *
-* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
-* *
-****************************************************************************/
-#include "stdafx.h"
-#include "LanguageSelector.h"
-
-CLanguageSelector::CLanguageSelector()
-{
-}
-
-void CLanguageSelector::Select(void)
-{
- DialogBoxParamW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_Lang_Select), NULL, (DLGPROC)LangSelectProc, (LPARAM)this);
-}
-
-LRESULT CALLBACK CLanguageSelector::LangSelectProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- static HBITMAP hbmpBackgroundTop = NULL;
- static HFONT hTextFont = NULL;
- static CLanguageSelector * lngClass;
-
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- lngClass = (CLanguageSelector *)lParam;
-
- LanguageList LangList = g_Lang->GetLangList();
- if (LangList.size() == 0)
- {
- EndDialog(hDlg, 0);
- }
- for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++)
- {
- int index = SendMessageW(GetDlgItem(hDlg, IDC_LANG_SEL), CB_ADDSTRING, 0, (WPARAM)stdstr(Language->LanguageName).ToUTF16().c_str());
- if (_stricmp(Language->LanguageName.c_str(), "English") == 0)
- {
- SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_SETCURSEL, index, 0);
- }
- }
-
- int Index = SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETCURSEL, 0, 0);
- if (Index < 0)
- {
- SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_SETCURSEL, 0, 0);
- }
-
- //Get Windows DPI Scale
- float DPIScale = CClientDC(hDlg).GetDeviceCaps(LOGPIXELSX) / 96.0f;
-
- // Use the size of the image
- hbmpBackgroundTop = LoadBitmap(GetModuleHandle(NULL), DPIScale <= 1.0f ? MAKEINTRESOURCE(IDB_ABOUT_LOGO) : MAKEINTRESOURCE(IDB_ABOUT_LOGO_HDPI));
- BITMAP bmTL;
- GetObject(hbmpBackgroundTop, sizeof(BITMAP), &bmTL);
-
- hTextFont = ::CreateFont(18, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial");
- SendDlgItemMessage(hDlg, IDC_SELECT_LANG, WM_SETFONT, (WPARAM)hTextFont, TRUE);
- }
- break;
- case WM_CTLCOLORSTATIC:
- {
- HDC hdcStatic = (HDC)wParam;
- SetTextColor(hdcStatic, RGB(0, 0, 0));
- SetBkMode(hdcStatic, TRANSPARENT);
- return (LONG)(LRESULT)((HBRUSH)GetStockObject(NULL_BRUSH));
- }
- break;
- case WM_ERASEBKGND:
- {
- HPEN outline;
- HBRUSH fill;
- RECT rect;
-
- outline = CreatePen(PS_SOLID, 1, 0x00FFFFFF);
- fill = CreateSolidBrush(0x00FFFFFF);
- SelectObject((HDC)wParam, outline);
- SelectObject((HDC)wParam, fill);
-
- GetClientRect(hDlg, &rect);
-
- Rectangle((HDC)wParam, rect.left, rect.top, rect.right, rect.bottom);
- }
- break;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
-
- if (BeginPaint(hDlg, &ps))
- {
- RECT rcClient;
- GetClientRect(hDlg, &rcClient);
-
- BITMAP bmTL_top;
- GetObject(hbmpBackgroundTop, sizeof(BITMAP), &bmTL_top);
-
- HDC memdc = CreateCompatibleDC(ps.hdc);
- HGDIOBJ save = SelectObject(memdc, hbmpBackgroundTop);
- SetStretchBltMode(ps.hdc, HALFTONE);
- StretchBlt(ps.hdc, 0, 0, rcClient.right, (int)(bmTL_top.bmHeight * rcClient.right / bmTL_top.bmWidth), memdc, 0, 0, bmTL_top.bmWidth, bmTL_top.bmHeight, SRCCOPY);
- SelectObject(memdc, save);
- DeleteDC(memdc);
-
- EndPaint(hDlg, &ps);
- }
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDOK:
- if (hbmpBackgroundTop)
- {
- DeleteObject(hbmpBackgroundTop);
- }
-
- if (hTextFont)
- {
- ::DeleteObject(hTextFont);
- }
-
- {
- int Index = SendMessage(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETCURSEL, 0, 0);
-
- if (Index >= 0)
- {
- wchar_t String[255];
- SendMessageW(GetDlgItem(hDlg, IDC_LANG_SEL), CB_GETLBTEXT, Index, (LPARAM)String);
- g_Lang->SetLanguage(stdstr().FromUTF16(String).c_str());
- }
- }
-
- EndDialog(hDlg, 0);
- break;
- }
- default:
- return FALSE;
- }
- return TRUE;
-}
\ No newline at end of file
diff --git a/Source/Project64/Project64.vcxproj b/Source/Project64/Project64.vcxproj
index 00c4aab9d..cfaf32fad 100644
--- a/Source/Project64/Project64.vcxproj
+++ b/Source/Project64/Project64.vcxproj
@@ -51,7 +51,6 @@
-
@@ -110,17 +109,19 @@
+
+
+
-
@@ -184,6 +185,7 @@
+
@@ -193,6 +195,7 @@
+
diff --git a/Source/Project64/Project64.vcxproj.filters b/Source/Project64/Project64.vcxproj.filters
index c72919807..d436f28fe 100644
--- a/Source/Project64/Project64.vcxproj.filters
+++ b/Source/Project64/Project64.vcxproj.filters
@@ -20,9 +20,6 @@
{89244064-68f5-44d9-9021-7a592d910e43}
-
- {94e87bf5-3b11-4f61-8a4a-333690ecf588}
-
{242ae4a5-b150-44e6-b31c-027acd6d38b0}
@@ -43,9 +40,6 @@
{838a58e7-e1d2-45d3-bcf0-dcedad19610c}
-
- {5531af4d-33bb-4e84-8a55-c971a18ec7bf}
-
{8eaf5c00-c88d-418e-a27c-d658c547ab79}
@@ -132,9 +126,6 @@
Source Files\Settings Files
-
- Source Files\Multilanguage Source
-
Source Files\User Interface Source
@@ -246,14 +237,20 @@
Source Files\User Interface Source
+
+ Source Files\User Interface Source
+
+
+ Source Files\User Interface Source\WTL Controls Source
+
+
+ Source Files\User Interface Source\WTL Controls Source
+
Resource Files
-
- Header Files\Multilanguage Headers
-
Header Files\User Interface Headers
@@ -482,6 +479,12 @@
Header Files\User Interface Headers\Debugger Headers
+
+ Header Files\User Interface Headers
+
+
+ Header Files\User Interface Headers\WTL Controls Headers
+
diff --git a/Source/Project64/UserInterface/Debugger/Debugger-RegisterTabs.cpp b/Source/Project64/UserInterface/Debugger/Debugger-RegisterTabs.cpp
index 76688bb24..c2f899076 100644
--- a/Source/Project64/UserInterface/Debugger/Debugger-RegisterTabs.cpp
+++ b/Source/Project64/UserInterface/Debugger/Debugger-RegisterTabs.cpp
@@ -936,8 +936,8 @@ stdstr CRegisterTabs::CopyTabRegisters(int id)
{
str += stdstr_f(
"\r\n%s %s",
- ::GetCWindowText(label).c_str(),
- ::GetCWindowText(edit).c_str());
+ ::GetCWindowText(*label).c_str(),
+ ::GetCWindowText(*edit).c_str());
});
switch (id)
@@ -1042,7 +1042,7 @@ uint64_t CEditReg64::GetValue()
stdstr CEditReg64::GetValueText()
{
- return ::GetCWindowText(this);
+ return ::GetCWindowText(*this);
}
LRESULT CEditReg64::OnLostFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
diff --git a/Source/Project64/UserInterface/UIResources.rc b/Source/Project64/UserInterface/UIResources.rc
index 1f897e81d..c61ec3110 100644
--- a/Source/Project64/UserInterface/UIResources.rc
+++ b/Source/Project64/UserInterface/UIResources.rc
@@ -496,14 +496,18 @@ BEGIN
PUSHBUTTON "Close",IDCANCEL,154,110,50,14
END
-IDD_Lang_Select DIALOGEX 0, 0, 233, 120
+IDD_Welcome DIALOGEX 0, 0, 234, 126
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
-CAPTION "Project64"
+CAPTION "Project64 - Welcome"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- DEFPUSHBUTTON "OK",IDOK,90,99,50,12
+ DEFPUSHBUTTON "OK",IDOK,90,108,50,12
LTEXT "Select Language:",IDC_SELECT_LANG,12,77,86,12
- COMBOBOX IDC_LANG_SEL,105,77,112,120,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_LANG_SEL,82,77,130,120,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_BMP_LOGO,"Static",SS_BLACKFRAME,1,0,232,74
+ LTEXT "Game Directory:",IDC_GAME_DIR_STATIC,12,91,86,12
+ EDITTEXT IDC_GAME_DIR,82,91,130,12,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_SELECT_GAME_DIR,215,91,14,12
END
IDD_Debugger_Memory DIALOGEX 0, 0, 321, 199
@@ -1584,12 +1588,10 @@ BEGIN
BOTTOMMARGIN, 124
END
- IDD_Lang_Select, DIALOG
+ IDD_Welcome, DIALOG
BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 230
- TOPMARGIN, 7
- BOTTOMMARGIN, 107
+ RIGHTMARGIN, 233
+ BOTTOMMARGIN, 120
END
IDD_Debugger_Memory, DIALOG
@@ -2224,6 +2226,11 @@ BEGIN
0
END
+IDD_Welcome AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
/////////////////////////////////////////////////////////////////////////////
//
diff --git a/Source/Project64/UserInterface/WTLControls/EditNumber32.cpp b/Source/Project64/UserInterface/WTLControls/EditNumber32.cpp
index cb92d21d1..0940d2a1c 100644
--- a/Source/Project64/UserInterface/WTLControls/EditNumber32.cpp
+++ b/Source/Project64/UserInterface/WTLControls/EditNumber32.cpp
@@ -333,7 +333,7 @@ uint32_t CEditNumber32::GetValue(void)
stdstr CEditNumber32::GetValueText(void)
{
- return ::GetCWindowText(this);
+ return ::GetCWindowText(*this);
}
void CEditNumber32::SetValue(uint32_t Value, DisplayMode Display)
diff --git a/Source/Project64/UserInterface/WTLControls/GetCWindowText.cpp b/Source/Project64/UserInterface/WTLControls/GetCWindowText.cpp
new file mode 100644
index 000000000..2f40f5b29
--- /dev/null
+++ b/Source/Project64/UserInterface/WTLControls/GetCWindowText.cpp
@@ -0,0 +1,16 @@
+#include "stdafx.h"
+#include "GetCWindowText.h"
+#include
+
+std::string GetCWindowText(const CWindow & window)
+{
+ int nLen = window.GetWindowTextLength();
+ if (nLen == 0)
+ {
+ return "";
+ }
+ std::wstring WindowText;
+ WindowText.resize(nLen + 1);
+ window.GetWindowText((wchar_t *)WindowText.c_str(), nLen + 1);
+ return stdstr().FromUTF16(WindowText.c_str());
+}
\ No newline at end of file
diff --git a/Source/Project64/UserInterface/WTLControls/GetCWindowText.h b/Source/Project64/UserInterface/WTLControls/GetCWindowText.h
index a6e2786c1..30240b528 100644
--- a/Source/Project64/UserInterface/WTLControls/GetCWindowText.h
+++ b/Source/Project64/UserInterface/WTLControls/GetCWindowText.h
@@ -1,17 +1,5 @@
#pragma once
+#include
-#include "stdafx.h"
+std::string GetCWindowText(const CWindow & window);
-inline static stdstr GetCWindowText(const CWindow *window)
-{
- stdstr Result;
- int nLen = ::GetWindowTextLengthW(window->m_hWnd);
- if (nLen == 0)
- {
- return Result;
- }
- std::wstring WindowText;
- WindowText.resize(nLen + 1);
- ::GetWindowTextW(window->m_hWnd, (wchar_t *)WindowText.c_str(), nLen + 1);
- return Result.FromUTF16(WindowText.c_str());
-}
\ No newline at end of file
diff --git a/Source/Project64/UserInterface/WTLControls/ModifiedEditBox.cpp b/Source/Project64/UserInterface/WTLControls/ModifiedEditBox.cpp
index 8f2b9c470..9fd75a19b 100644
--- a/Source/Project64/UserInterface/WTLControls/ModifiedEditBox.cpp
+++ b/Source/Project64/UserInterface/WTLControls/ModifiedEditBox.cpp
@@ -80,7 +80,7 @@ void CModifiedEditBox::SetChanged(bool Changed)
stdstr CModifiedEditBox::GetWindowText(void)
{
ATLASSERT(::IsWindow(m_hWnd));
- return ::GetCWindowText(this);
+ return ::GetCWindowText(*this);
}
void CModifiedEditBox::SetTextField(HWND hWnd)
diff --git a/Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.cpp b/Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.cpp
new file mode 100644
index 000000000..168ee1253
--- /dev/null
+++ b/Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.cpp
@@ -0,0 +1,103 @@
+/****************************************************************************
+* *
+* Project64 - A Nintendo 64 emulator. *
+* http://www.pj64-emu.com/ *
+* Copyright (C) 2012 Project64. All rights reserved. *
+* *
+* License: *
+* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
+* *
+****************************************************************************/
+#include "stdafx.h"
+#include "wtl-BitmapPicture.h"
+
+CBitmapPicture::CBitmapPicture() :
+ m_hBitmap(NULL),
+ m_nResourceID(-1),
+ m_ResourceIcon(false)
+{
+ memset(&m_bmInfo, 0, sizeof(m_bmInfo));
+ m_BackgroundBrush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
+}
+
+LRESULT CBitmapPicture::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL &/*bHandled*/)
+{
+ CPaintDC dc(m_hWnd);
+ CRect rect;
+ GetClientRect(&rect);
+
+ CBrush PaintBrush;
+ HBRUSH OldBrush = dc.SelectBrush(m_BackgroundBrush);
+ dc.PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
+ if (m_ResourceIcon)
+ {
+ CIcon hIcon = (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), m_nResourceID > 0 ? MAKEINTRESOURCE(m_nResourceID) : m_strResourceName.c_str(), IMAGE_ICON, m_IconWidth, m_IconHeight, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
+ if (!hIcon.IsNull())
+ {
+ dc.DrawIconEx(0, 0, hIcon, rect.Width(), rect.Height(), 0, NULL, DI_NORMAL);
+ }
+ }
+ else
+ {
+ CBitmap hBmp = (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), m_nResourceID > 0 ? MAKEINTRESOURCE(m_nResourceID) : m_strResourceName.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS);
+ BITMAP bm;
+ hBmp.GetBitmap(&bm);
+
+ CDC dcMem;
+ dcMem.CreateCompatibleDC(dc);
+ dcMem.SelectBitmap(hBmp);
+ dc.StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(), dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
+ }
+ dc.SelectBrush(OldBrush);
+ return 0;
+}
+
+bool CBitmapPicture::SetIcon(LPCWSTR lpszResourceName, uint32_t nWidth, uint32_t nHeight)
+{
+ CIcon hIcon = (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), lpszResourceName, IMAGE_ICON, nWidth, nHeight, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
+ if (hIcon.IsNull())
+ {
+ return false;
+ }
+ ICONINFO IconInfo;
+ if (!hIcon.GetIconInfo(&IconInfo))
+ {
+ return false;
+ }
+ if (IS_INTRESOURCE(lpszResourceName))
+ {
+ m_nResourceID = (int)lpszResourceName;
+ }
+ else
+ {
+ m_strResourceName = lpszResourceName;
+ }
+ m_ResourceIcon = true;
+ m_IconWidth = nWidth;
+ m_IconHeight = nHeight;
+ return true;
+}
+
+bool CBitmapPicture::SetBitmap(HBITMAP hBitmap)
+{
+ m_hBitmap.Attach(hBitmap);
+ return ::GetObject(m_hBitmap, sizeof(BITMAP), &m_bmInfo) != 0;
+}
+
+void CBitmapPicture::SetBitmap(LPCWSTR lpszResourceName)
+{
+ if (IS_INTRESOURCE(lpszResourceName))
+ {
+ m_nResourceID = (int)lpszResourceName;
+ }
+ else
+ {
+ m_strResourceName = lpszResourceName;
+ }
+ m_ResourceIcon = false;
+}
+
+void CBitmapPicture::SetBackroundBrush(HBRUSH brush)
+{
+ m_BackgroundBrush.Attach(brush);
+}
diff --git a/Source/Project64/Multilanguage/LanguageSelector.h b/Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.h
similarity index 52%
rename from Source/Project64/Multilanguage/LanguageSelector.h
rename to Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.h
index 4aecec235..a9cdda9ca 100644
--- a/Source/Project64/Multilanguage/LanguageSelector.h
+++ b/Source/Project64/UserInterface/WTLControls/wtl-BitmapPicture.h
@@ -10,16 +10,33 @@
****************************************************************************/
#pragma once
-class CLanguageSelector
+class CBitmapPicture :
+ public CWindowImpl
{
public:
- CLanguageSelector();
+ BEGIN_MSG_MAP(CBitmapPicture)
+ MESSAGE_HANDLER(WM_PAINT, OnPaint);
+ END_MSG_MAP()
- void Select(void);
+ CBitmapPicture();
+
+ LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL &/*bHandled*/);
+
+ bool SetIcon(LPCWSTR lpszResourceName, uint32_t nWidth, uint32_t nHeight);
+ void SetBitmap(LPCWSTR lpszResourceName);
+ void SetBackroundBrush(HBRUSH brush);
private:
- CLanguageSelector(const CLanguageSelector&); // Disable copy constructor
- CLanguageSelector& operator=(const CLanguageSelector&); // Disable assignment
+ CBitmapPicture(const CBitmapPicture&);
+ CBitmapPicture& operator=(const CBitmapPicture&);
- static LRESULT CALLBACK LangSelectProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ bool CBitmapPicture::SetBitmap(HBITMAP hBitmap);
+
+ int m_nResourceID;
+ std::wstring m_strResourceName;
+ uint32_t m_IconWidth, m_IconHeight;
+ bool m_ResourceIcon;
+ BITMAP m_bmInfo;
+ CBitmap m_hBitmap;
+ CBrush m_BackgroundBrush;
};
\ No newline at end of file
diff --git a/Source/Project64/UserInterface/WelcomeScreen.cpp b/Source/Project64/UserInterface/WelcomeScreen.cpp
new file mode 100644
index 000000000..46fd3711d
--- /dev/null
+++ b/Source/Project64/UserInterface/WelcomeScreen.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+* *
+* Project64 - A Nintendo 64 emulator. *
+* http://www.pj64-emu.com/ *
+* Copyright (C) 2012 Project64. All rights reserved. *
+* *
+* License: *
+* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
+* *
+****************************************************************************/
+#include "stdafx.h"
+#include "WelcomeScreen.h"
+#include "resource.h"
+
+WelcomeScreen::WelcomeScreen()
+{
+}
+
+void WelcomeScreen::SelectGameDir(UINT /*Code*/, int /*id*/, HWND /*ctl*/)
+{
+ wchar_t Buffer[MAX_PATH], Directory[MAX_PATH];
+ LPITEMIDLIST pidl;
+ BROWSEINFOW bi;
+
+ stdstr InitialDir = g_Settings->LoadStringVal(RomList_GameDir);
+ std::wstring wTitle = L"Select Game Directory";
+ bi.hwndOwner = m_hWnd;
+ bi.pidlRoot = NULL;
+ bi.pszDisplayName = Buffer;
+ bi.lpszTitle = wTitle.c_str();
+ bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
+ bi.lpfn = (BFFCALLBACK)SelectDirCallBack;
+ bi.lParam = (DWORD)InitialDir.c_str();
+ if ((pidl = SHBrowseForFolderW(&bi)) != NULL)
+ {
+ if (SHGetPathFromIDListW(pidl, Directory))
+ {
+ stdstr path;
+ CPath SelectedDir(path.FromUTF16(Directory), "");
+ if (SelectedDir.DirectoryExists())
+ {
+ GetDlgItem(IDC_GAME_DIR).SetWindowText(Directory);
+ }
+ }
+ }
+}
+
+LRESULT WelcomeScreen::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
+{
+ m_Logo.SubclassWindow(GetDlgItem(IDC_BMP_LOGO));
+ m_Logo.SetBitmap(MAKEINTRESOURCE(IDB_ABOUT_LOGO));
+
+ LanguageList LangList = g_Lang->GetLangList();
+ CComboBox LangCB(GetDlgItem(IDC_LANG_SEL));
+ for (LanguageList::iterator Language = LangList.begin(); Language != LangList.end(); Language++)
+ {
+ int Index = LangCB.AddString(stdstr(Language->LanguageName).ToUTF16().c_str());
+ if (_stricmp(Language->LanguageName.c_str(), "English") == 0)
+ {
+ LangCB.SetCurSel(Index);
+ }
+ }
+ if (LangCB.GetCurSel() < 0)
+ {
+ LangCB.SetCurSel(0);
+ }
+ return TRUE;
+}
+
+LRESULT WelcomeScreen::OnColorStatic(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
+{
+ HDC hdcStatic = (HDC)wParam;
+ SetTextColor(hdcStatic, RGB(0, 0, 0));
+ SetBkMode(hdcStatic, TRANSPARENT);
+ return (LONG)(LRESULT)((HBRUSH)GetStockObject(NULL_BRUSH));
+}
+
+LRESULT WelcomeScreen::OnEraseBackground(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
+{
+ static HPEN outline = CreatePen(PS_SOLID, 1, 0x00FFFFFF);
+ static HBRUSH fill = CreateSolidBrush(0x00FFFFFF);
+ SelectObject((HDC)wParam, outline);
+ SelectObject((HDC)wParam, fill);
+
+ RECT rect;
+ GetClientRect(&rect);
+
+ Rectangle((HDC)wParam, rect.left, rect.top, rect.right, rect.bottom);
+ return TRUE;
+}
+
+LRESULT WelcomeScreen::OnOkCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL & /*bHandled*/)
+{
+ CComboBox LangCB(GetDlgItem(IDC_LANG_SEL));
+ int Index = LangCB.GetCurSel();
+ if (Index >= 0)
+ {
+ wchar_t String[255];
+ LangCB.GetLBText(Index, String);
+ g_Lang->SetLanguage(stdstr().FromUTF16(String).c_str());
+ }
+
+ CPath GameDir(GetCWindowText(GetDlgItem(IDC_GAME_DIR)).c_str(), "");
+ if (GameDir.DirectoryExists())
+ {
+ g_Settings->SaveString(RomList_GameDir, GameDir.GetDirectory().c_str());
+ Notify().AddRecentDir(GameDir);
+ }
+ EndDialog(0);
+ return TRUE;
+}
+
+int CALLBACK WelcomeScreen::SelectDirCallBack(HWND hwnd, DWORD uMsg, DWORD /*lp*/, DWORD lpData)
+{
+ switch (uMsg)
+ {
+ case BFFM_INITIALIZED:
+ // WParam is TRUE since you are passing a path.
+ // It would be FALSE if you were passing a pidl.
+ if (lpData)
+ {
+ SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
+ }
+ break;
+ }
+ return 0;
+}
diff --git a/Source/Project64/UserInterface/WelcomeScreen.h b/Source/Project64/UserInterface/WelcomeScreen.h
new file mode 100644
index 000000000..7b3695911
--- /dev/null
+++ b/Source/Project64/UserInterface/WelcomeScreen.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+* *
+* Project64 - A Nintendo 64 emulator. *
+* http://www.pj64-emu.com/ *
+* Copyright (C) 2012 Project64. All rights reserved. *
+* *
+* License: *
+* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
+* *
+****************************************************************************/
+#pragma once
+#include
+#include "resource.h"
+
+class WelcomeScreen :
+ public CDialogImpl
+{
+public:
+ BEGIN_MSG_MAP_EX(CEnhancementConfig)
+ MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
+ MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
+ MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
+ COMMAND_ID_HANDLER_EX(IDC_SELECT_GAME_DIR, SelectGameDir)
+ COMMAND_ID_HANDLER(IDOK, OnOkCmd)
+ END_MSG_MAP()
+
+ enum { IDD = IDD_Lang_Select };
+
+ WelcomeScreen(void);
+
+private:
+ WelcomeScreen(const WelcomeScreen&);
+ WelcomeScreen& operator=(const WelcomeScreen&);
+
+ void SelectGameDir(UINT Code, int id, HWND ctl);
+
+ LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
+ LRESULT OnColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
+ LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
+ LRESULT OnOkCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL & bHandled);
+
+ static int CALLBACK SelectDirCallBack(HWND hwnd, DWORD uMsg, DWORD lp, DWORD lpData);
+
+ CBitmapPicture m_Logo;
+};
\ No newline at end of file
diff --git a/Source/Project64/UserInterface/resource.h b/Source/Project64/UserInterface/resource.h
index bfae867f6..97784ab82 100644
--- a/Source/Project64/UserInterface/resource.h
+++ b/Source/Project64/UserInterface/resource.h
@@ -47,6 +47,7 @@
#define IDR_CHEAT_MENU 160
#define IDD_Debugger_AddBreakpoint 160
#define IDD_Lang_Select 161
+#define IDD_Welcome 161
#define IDD_Settings_GameRecompiler 162
#define IDD_Settings_GamePlugin 163
#define IDD_Settings_GameStatus 164
@@ -233,6 +234,7 @@
#define IDC_INFO3 1083
#define IDC_START_ON_ROM_OPEN 1084
#define IDC_LABEL1 1084
+#define IDC_BMP_LOGO 1084
#define IDC_BLOCK_LINKING 1085
#define IDC_LABEL2 1085
#define IDC_LABEL3 1086
@@ -243,6 +245,7 @@
#define IDC_SAVE_TYPE 1089
#define IDC_MENU_ITEMS 1089
#define IDC_PAGELIST 1090
+#define IDC_GAME_DIR_STATIC 1090
#define IDC_CPU_TYPE_TEXT 1092
#define IDC_ZIP 1092
#define IDC_SETTING_INFO 1092
@@ -715,7 +718,9 @@
#define IDC_COPYTABREGISTERS_BTN 1574
#define IDC_MEMORY_SIZE_NOTE 1574
#define IDC_F0_LBL 1575
+#define IDC_GAME_DIR 1575
#define IDC_F1_LBL 1576
+#define IDC_SELECT_GAME_DIR 1576
#define IDC_F2_LBL 1577
#define IDC_F3_LBL 1578
#define IDC_F4_LBL 1579
@@ -933,9 +938,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 219
+#define _APS_NEXT_RESOURCE_VALUE 220
#define _APS_NEXT_COMMAND_VALUE 40121
-#define _APS_NEXT_CONTROL_VALUE 1575
+#define _APS_NEXT_CONTROL_VALUE 1577
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif
diff --git a/Source/Project64/main.cpp b/Source/Project64/main.cpp
index 9bd706962..9e3861d04 100644
--- a/Source/Project64/main.cpp
+++ b/Source/Project64/main.cpp
@@ -1,7 +1,7 @@
#include "stdafx.h"
-#include
-#include "Multilanguage\LanguageSelector.h"
-#include "Settings/UISettings.h"
+#include
+#include "UserInterface\WelcomeScreen.h"
+#include "Settings\UISettings.h"
int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpszArgs*/, int /*nWinMode*/)
{
@@ -11,7 +11,7 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /
AppInit(&Notify(), CPath(CPath::MODULE_DIRECTORY), __argc, __argv);
if (!g_Lang->IsLanguageLoaded())
{
- CLanguageSelector().Select();
+ WelcomeScreen().DoModal();
}
//Create the main window with Menu