⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testlibview.cpp

📁 这是书上的代码
💻 CPP
字号:
// TestLibView.cpp : implementation of the CTestLibView class
//

#include "stdafx.h"
#include "TestLib.h"
#include "MainFrm.h"
#include "TestLibDoc.h"
#include "TestLibView.h"
#include "tlhelp32.h"
#include "IniFile.h"
#include "PofileDlg.h"
#include "WS1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestLibView

IMPLEMENT_DYNCREATE(CTestLibView, CMyView)

BEGIN_MESSAGE_MAP(CTestLibView, CMyView)
	//{{AFX_MSG_MAP(CTestLibView)
	ON_COMMAND(ID_LOGONPANE, OnLogonpane)
	ON_COMMAND(ID_GETMODULEHANDLE, OnGetmodulehandle)
	ON_COMMAND(ID_CREATE_PROFILE, OnCreateProfile)
	ON_COMMAND(ID_VIEW_PF, OnViewPf)
	
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_OPERATE1, OnOperate1)
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CMyView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CMyView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CMyView::OnFilePrintPreview)

//	ON_COMMAND(WM_DISPLAY_WNDINFO,DisplayWndInfo)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestLibView construction/destruction

CTestLibView::CTestLibView()
{
	m_pLogoPane = NULL;
	m_bLBDown	= FALSE;
	m_pToolTip  = NULL;

}

CTestLibView::~CTestLibView()
{
	if(m_pLogoPane!=NULL)
	{
		delete m_pLogoPane;
		m_pLogoPane=NULL;
	}


}

BOOL CTestLibView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CMyView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CTestLibView drawing

void CTestLibView::OnDraw(CDC* pDC)
{
	CTestLibDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CTestLibView printing

BOOL CTestLibView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTestLibView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTestLibView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CTestLibView diagnostics

#ifdef _DEBUG
void CTestLibView::AssertValid() const
{
	CMyView::AssertValid();
}

void CTestLibView::Dump(CDumpContext& dc) const
{
	CMyView::Dump(dc);
}

CTestLibDoc* CTestLibView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestLibDoc)));
	return (CTestLibDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTestLibView message handlers

void CTestLibView::OnLogonpane() 
{
/*	if(m_pLogoPane!=NULL)
		delete m_pLogoPane;
	
	CWnd*	pTempWnd;
	CRect	rect;
	m_pLogoPane=new CCJLogoPane;

	pTempWnd=FromHandle(((CMainFrame *)AfxGetMainWnd())->m_hWndMDIClient);
	pTempWnd->GetWindowRect(&rect);
	rect.DeflateRect(100,190);
	m_pLogoPane->Create("LogoPane", WS_OVERLAPPED|WS_VISIBLE,pTempWnd, IDD_DIALOG1);
	m_pLogoPane->MoveWindow(&rect);
	m_pLogoPane->ShowWindow(SW_SHOW);
*/
}

void CTestLibView::OnGetmodulehandle() 
{
	HANDLE				hSnapshot;
//	PROCESSENTRY32		pe;
	MODULEENTRY32		me;
	BOOL				hasInfo;
	CDynHelpViewBar*	pDynHelpView;
	CCJTreeCtrl*		pTree;

/*
	WCHAR	DWORD	szTh32ModuleID[];				// 模块号 
	WCHAR	DWORD	szTh32ProcessID[];				// 包含本模块的进程号
	WCHAR	DWORD	szGlblcntUsage[];				// 本模块的全局引用计数 
	WCHAR	DWORD	szProccntUsage[];				// 包含模块的进程上下文中的模块引用计数 
	WCHAR	BYTE*	szModBaseAddr[];				// 模块基地址 
	WCHAR	DWORD	szModBaseSize[];				// 模块大小(字节数) 
	WCHAR	HMODULE	szHModule[];					// 包含模块的进程上下文中的hModule句柄
	WCHAR				szModule[MAX_MODULE_NAME32 + 1]; //模块名
	WCHAR				szExePath[MAX_PATH];			//模块对应的文件名和路径
*/


	pDynHelpView=&(((CMainFrame *)AfxGetMainWnd())->m_wndDynHelpView);
	pTree=&(pDynHelpView->m_wndArticles);
	

	HTREEITEM hTreeItem = pTree->InsertItem (_T("当前模块信息"),0, 2, NULL);
	pTree->SetItemData (hTreeItem, (DWORD) 1);
	
	
	
	hSnapshot =CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
	me.dwSize =sizeof(MODULEENTRY32);
	hasInfo =Module32First(hSnapshot,&me);
	while(hasInfo==TRUE)
		{

		pTree->InsertItem (_T("模块名称"), 5, 5, hTreeItem);
		pTree->SetItemData (hTreeItem, (DWORD) 2);
		
		pTree->InsertItem (_T("模块名称文件名"), 1, 3, NULL);
		pTree->SetItemData (hTreeItem, (DWORD) 2);
		
		pTree->InsertItem (_T("模块实例句柄"), 
			5, 5, hTreeItem);
		pTree->SetItemData (hTreeItem, (DWORD) 2);

		hasInfo	=Module32Next(hSnapshot,&me);
		}
	

	CloseHandle(hSnapshot);
}

void CTestLibView::OnCreateProfile() 
{
	CIniFile	pf;
	CString		Path="F:\\";
	CString		Name="profile";
	CString		Section;
	CString		Item;
	int			Value=7;
	int			i;
	CString*	strValue;
	
	pf.SetPath(Path);
	pf.SetName(Name);
	
	pf.OpenIniFileForWrite();

	Section="模块信息";
	pf.WriteSection(Section);
	Item="模块数目";
	
	pf.WriteItemInt(Item,Value);
	Item="模块列表";
	pf.WriteItemString(Item,"");

	strValue=new CString[Value];
	strValue[0]="影像库     GeoImageDBforGeostar.dll 无文档模板";
	strValue[1]="透明图象   GeoPhoto.dll  无文档模板";
	strValue[2]="空间分析   GeoAnalysis.dll 无文档模板";
	strValue[3]="普通图制图 GeoDecorate.dll 无文档模板";
	strValue[4]="专题制图   GeoTheme.dll 无文档模板";
	strValue[5]="图形编辑   GeoEdit.dll 无文档模板";
	strValue[6]="图板数字化 GeoDigitizing.dll 无文档模板";

	for(i=0;i<7;i++)
	{
		Item.Format("模块%d",i+1);
		pf.WriteItemString(Item,strValue[i]);
	}
	
	Section="当前模块使用情况";
	pf.WriteSection(Section);

	
	pf.CloseIniFile();
}

void CTestLibView::OnViewPf() 
{
	CPofileDlg pfDlg;
	pfDlg.DoModal();
}

void CTestLibView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	CDC*	pDC=GetDC();
	CWS1*	pWS1;

	pDC->TextOut(100,100,"现在正在处理...");
	pWS1=(CWS1 *)((((CMainFrame *)AfxGetMainWnd())->m_wndWorkspace).GetView(0));
	pWS1->ExecuteMenu(pWS1->m_curDType,this);
	CMyView::OnRButtonDown(nFlags, point);
}

void CTestLibView::OnOperate1() 
{
	m_bLBDown=TRUE;
}


void CTestLibView::OnLButtonDown(UINT nFlags, CPoint point) 
{
//	if(m_bLBDown==FALSE)
//		return;
	CMyView::OnLButtonDown(nFlags, point);
}

void CTestLibView::OnInitialUpdate() 
{
	CMyView::OnInitialUpdate();
	CMainFrame* pMainFrm=(CMainFrame *)AfxGetMainWnd();
	m_pToolTip=&(pMainFrm->m_toolTip);
	m_pToolTip->AddTool(this,
		_T("主视图\r显示区域\n供其他界面参照"));
	
	
}

BOOL CTestLibView::PreTranslateMessage(MSG* pMsg) 
{
	m_pToolTip->RelayEvent(pMsg);
	return CMyView::PreTranslateMessage(pMsg);
}



void CTestLibView::OnMyDraw(CDC* pDC)
{
	SendMessage(MYWM_DRAW,(WPARAM)this);
	m_bNeedUpdate = FALSE;
}


void CTestLibView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CRect rect;
	CBrush br;
	CBrush *oldBr;
	br.CreateSolidBrush(RGB(255,255,255));
	
	GetClientRect(&rect);
	oldBr=dc.SelectObject(&br);
	dc.FillRect(&rect,&br);
	dc.SelectObject(oldBr);
	OnMyDraw(&dc);
}

LRESULT CTestLibView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	return CMyView::WindowProc(message, wParam, lParam);
}


void  CTestLibView::DisplayWndInfo()
{
	CDC* pDC=GetDC();

	CMainFrame* pMainFrm=(CMainFrame *)AfxGetMainWnd();

	if(pMainFrm->m_szWindowCaption.GetLength()>0)
		pDC->TextOut(100,10,pMainFrm->m_szWindowCaption);
	if(pMainFrm->m_szWindowClassName.GetLength()>0)
		pDC->TextOut(100,40,pMainFrm->m_szWindowClassName);
	if(pMainFrm->m_cszhWnd.GetLength()>0)
		pDC->TextOut(100,70,pMainFrm->m_cszhWnd);
	if(pMainFrm->m_cszATOM.GetLength()>0)
		pDC->TextOut(100,100,pMainFrm->m_cszATOM);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -