?? imageboard.cpp
字號:
// ImageBoard.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include <dos.h>
#include <direct.h>
#include <WinVer.h>
#include "ImageBoard.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "ImageBoardDoc.h"
#include "ImageBoardView.h"
#include "Splash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageBoardApp
BEGIN_MESSAGE_MAP(CImageBoardApp, CWinApp)
//{{AFX_MSG_MAP(CImageBoardApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(IDM_PASTEASFILE, OnPasteasfile)
ON_UPDATE_COMMAND_UI(IDM_PASTEASFILE, OnUpdatePasteasfile)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageBoardApp construction
CImageBoardApp::CImageBoardApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CImageBoardApp object
CImageBoardApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CImageBoardApp initialization
BOOL CImageBoardApp::InitInstance()
{
AfxEnableControlContainer();
// CG: The following block was added by the Splash Screen component.
\
{
\
CCommandLineInfo cmdInfo;
\
ParseCommandLine(cmdInfo);
\
\
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
\
}
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("VC-IP"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_IMAGEBTYPE,
RUNTIME_CLASS(CImageBoardDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CImageBoardView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The main window has been initialized, so show and update it.
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTDLG };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
int GetWindowsVersion(LPSTR strVersion)
{
char lpszSysPath[512]; /* address of buffer for Windows directory */
GetWindowsDirectory(lpszSysPath, 512);
strcat(lpszSysPath,"\\system\\user.exe");
BYTE abData[512];
DWORD handle;
DWORD dwSize;
typedef struct tagLANGANDCP
{
WORD wLanguage;
WORD wCodePage;
} LANGANDCP;
LANGANDCP FAR *lpBuffer; // holds lang and codepage
dwSize = GetFileVersionInfoSize(lpszSysPath, &handle);
GetFileVersionInfo(lpszSysPath, handle, dwSize, abData);
VerQueryValue(abData, "\\VarFileInfo\\Translation", (VOID FAR* FAR*)&lpBuffer, (UINT FAR *)&dwSize);
VerLanguageName (lpBuffer->wLanguage, strVersion, 512);
return LOBYTE(LOWORD(GetVersion())); // windows version greater than 3.x?
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(hIcon, TRUE); // Set big icon
SetIcon(hIcon, FALSE); // Set small icon
CString str;
// fill memory info
MEMORYSTATUS MemStat;
MemStat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&MemStat);
// Total Physical mem
str.Format("%lu KB", MemStat.dwTotalPhys / 1024L);
SetDlgItemText(IDC_PHYSICAL_MEM, str);
// Free Physical mem
str.Format("%lu KB", MemStat.dwAvailPhys / 1024L);
SetDlgItemText(IDC_AVAIL_MEM, str);
// Free Virtual mem
str.Format("%lu KB", MemStat.dwAvailVirtual / 1024L);
SetDlgItemText(IDC_AVAIL_VIRTUAL_MEM, str);
// fill CPU info
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
switch (SysInfo.dwProcessorType)
{
case PROCESSOR_INTEL_486:
str = "Intel 80486";
break;
case PROCESSOR_INTEL_PENTIUM:
str = "Intel Pentium";
break;
default:
str = "";
break;
}
SetDlgItemText(IDC_CPU, str);
// fill OS info
OSVERSIONINFO OsInfo;
OsInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (GetVersionEx(&OsInfo))
{
// platform
switch (OsInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
str = "Windows 95";
break;
case VER_PLATFORM_WIN32_NT:
str = "Windows NT";
break;
default:
str = "";
break;
}
SetDlgItemText(IDC_OS, str);
// version and language
char szVer[512];
GetWindowsVersion((LPSTR)szVer);
str.Format("%ld.%ld, %s", OsInfo.dwMajorVersion,
OsInfo.dwMinorVersion, szVer);
SetDlgItemText(IDC_VERSION, str);
}
// fill disk information
char szWindowsPath[_MAX_PATH];
GetWindowsDirectory(szWindowsPath, _MAX_PATH);
ULARGE_INTEGER TotalNumberOfBytes, TotalNumberOfFreeBytes;
GetDiskFreeSpaceEx((LPSTR)szWindowsPath,
NULL,
&TotalNumberOfBytes,
&TotalNumberOfFreeBytes);
// total space
str.Format("%lu KB", TotalNumberOfBytes.QuadPart / 1024L);
SetDlgItemText(IDC_TOTAL_SPACE, str);
// free space
str.Format("%lu KB", TotalNumberOfFreeBytes.QuadPart / 1024L);
SetDlgItemText(IDC_FREE_SPACE, str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// App command to run the dialog
void CImageBoardApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CImageBoardApp message handlers
void CImageBoardApp::OnFileOpen()
{
CFileDialog FileDlg(TRUE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szOpenFilter);
if (FileDlg.DoModal() == IDOK)
OpenDocumentFile(FileDlg.m_ofn.lpstrFile);
}
BOOL CImageBoardApp::PreTranslateMessage(MSG* pMsg)
{
// CG: The following lines were added by the Splash Screen component. if (CSplashWnd::PreTranslateAppMessage(pMsg)) return TRUE; return CWinApp::PreTranslateMessage(pMsg);
}
void CImageBoardApp::OnPasteasfile()
{
OnFileNew();
CMainFrame *pMainWnd = (CMainFrame *)m_pMainWnd;
CChildFrame *pChildWnd = (CChildFrame *)pMainWnd->MDIGetActive();
CImageBoardView *pView = (CImageBoardView *)pChildWnd->GetActiveView();
CImageBoardDoc *pDoc = (CImageBoardDoc *)pChildWnd->GetActiveDocument();
// get DIB handle from clipboard
if (pChildWnd->OpenClipboard())
{
HDIB hNewDIB = NULL;
HBITMAP hNewDDB = NULL;
HPALETTE hPal = NULL;
if (IsClipboardFormatAvailable(CF_DIB))
{
hNewDIB = CopyHandle(GetClipboardData(CF_DIB));
if (hNewDIB != NULL)
{
pDoc->m_pDib->Attach(hNewDIB);
CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
pView->SetScrollSizes(MM_TEXT, sizeTotal);
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
}
}
else if (IsClipboardFormatAvailable(CF_BITMAP))
{
hNewDDB = (HBITMAP)GetClipboardData(CF_BITMAP);
if (IsClipboardFormatAvailable(CF_PALETTE))
hPal = (HPALETTE)GetClipboardData(CF_PALETTE);
if (hNewDDB != NULL)
{
pDoc->m_pDib->Create(hNewDDB, hPal);
CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
pView->SetScrollSizes(MM_TEXT, sizeTotal);
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
}
}
CloseClipboard();
}
}
void CImageBoardApp::OnUpdatePasteasfile(CCmdUI* pCmdUI)
{
pCmdUI->Enable(::IsClipboardFormatAvailable(CF_DIB) ||
::IsClipboardFormatAvailable(CF_BITMAP));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -