//TWindow.h
#pragma once
#include <windows.h>
#include <tchar.h>
#define IDC_EDIT 0x1
class TWindow
{
public:
static TWindow* CreateNewWindow(PCTSTR pszClassName, PCTSTR pszWindowName, HINSTANCE hInstance);
BOOL ShowWindow(void);
BOOL UpdateWindow(void);
~TWindow(void);
private:
static TWindow* m_p;
HWND m_hWnd;
HWND m_hChildWnd;
HINSTANCE m_hInstance;
TCHAR m_szClassName[128];
TCHAR m_szWindowName[128];
PSTR m_pszFileData;
private:
ATOM CreateWindowClass(void);
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
TWindow(PCTSTR pszClassName,
PCTSTR pszWindowName,
HINSTANCE hInstance);
VOID CreateMainWindow(void);
};
//
//TWindow.cpp
/
#include "TWindow.h"
TWindow* TWindow::m_p = NULL;
TWindow::TWindow(PCTSTR pszClassName,
PCTSTR pszWindowName,
HINSTANCE hInstance)
:m_hInstance(hInstance)
,m_hChildWnd(NULL)
,m_pszFileData(NULL)
{
::lstrcpyn(m_szClassName,pszClassName,128);
::lstrcpyn(m_szWindowName,pszWindowName,128);
}
TWindow::~TWindow(void)
{
if (m_pszFileData)
{
delete m_pszFileData;
}
}
ATOM TWindow::CreateWindowClass(void)
{
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=::LoadCursor(NULL,IDC_ARROW);
wc.hIcon=::LoadIcon(m_hInstance,IDI_APPLICATION);
wc.hInstance=m_hInstance;
wc.lpfnWndProc=TWindow::WndProc;
wc.lpszClassName=m_szClassName;
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
return ::RegisterClass(&wc);
}
LRESULT CALLBACK TWindow::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
m_p->m_hChildWnd=::CreateWindow(TEXT("edit"),
TEXT(""),
WS_VISIBLE|WS_CHILDWINDOW|ES_LEFT|
ES_MULTILINE|ES_NOHIDESEL|WS_VSCROLL|WS_HSCROLL,
0,0,
CW_USEDEFAULT,CW_USEDEFAULT,
hWnd,
(HMENU)IDC_EDIT,
(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
NULL);
HANDLE hFile=::CreateFile(TEXT(__FILE__),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
LARGE_INTEGER li;
DWORD dw=0;
::GetFileSizeEx(hFile,&li);
m_p->m_pszFileData=new CHAR[li.LowPart];
::ReadFile(hFile,m_p->m_pszFileData,li.LowPart,&dw,NULL);
::CloseHandle(hFile);
m_p->m_pszFileData[li.LowPart-2]=NULL;
::SetWindowText(hWnd,TEXT(__FILE__));
break;
}
case WM_SIZE:
::MoveWindow(m_p->m_hChildWnd,
0,0,
LOWORD(lParam),HIWORD(lParam),TRUE);
::SetFocus(m_p->m_hChildWnd);
::SetWindowTextA(m_p->m_hChildWnd,m_p->m_pszFileData);
break;
case WM_DESTROY:
if (m_p!=NULL)
{
delete m_p;
}
::PostQuitMessage(0);
}
return ::DefWindowProc(hWnd,msg,wParam,lParam);
}
VOID TWindow::CreateMainWindow(void)
{
m_hWnd=::CreateWindow(m_szClassName,
m_szWindowName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,
NULL,m_hInstance,
NULL);
}
TWindow* TWindow::CreateNewWindow(PCTSTR pszClassName, PCTSTR pszWindowName, HINSTANCE hInstance)
{
if(TWindow::m_p!=NULL)
return TWindow::m_p;
m_p=new TWindow(pszClassName,pszWindowName,hInstance);
m_p->CreateWindowClass();
m_p->CreateMainWindow();
m_p->UpdateWindow();
m_p->ShowWindow();
return m_p;
}
BOOL TWindow::ShowWindow(void)
{
return ::ShowWindow(m_hWnd,SW_SHOW);
}
BOOL TWindow::UpdateWindow(void)
{
return ::UpdateWindow(m_hWnd);
}
//
//main.cpp
/
#include "TWindow.h"
int APIENTRY _tWinMain( __in HINSTANCE hInstance,
__in_opt HINSTANCE hPrevInstance,
__in_opt LPWSTR lpCmdLine,
__in int nShowCmd )
{
TCHAR szClassName[]=TEXT("MainWndProc");
TCHAR szWindowName[]=TEXT("Main Window");
MSG msg;
TWindow::CreateNewWindow(szClassName,szWindowName,hInstance);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}