试着做的文件编辑器

//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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值