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

📄 findtab.cpp

📁 Windows 图形编程 书籍
💻 CPP
字号:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : findtab.cpp					                                     //
//  Description: Locate GDI handle table, Chapter 3                                  //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#include <windows.h>
#include <assert.h>
#include <tchar.h>
#include <stdio.h>

#include "pefile.h"

#include "resource.h"
#include "findTab.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

KLocateGdiTablePage::KLocateGdiTablePage()
{

}

KLocateGdiTablePage::~KLocateGdiTablePage()
{

}


typedef unsigned (CALLBACK * Proc0) (void);


void KLocateGdiTablePage::GdiQueryTable(void)
{
    Proc0 p = (Proc0) GetProcAddress(GetModuleHandle("GDI32.DLL"), "GdiQueryTable");

    if (p)
    {
        TCHAR temp[32];

        wsprintf(temp, "%8lX", p());
        MessageBox(NULL, temp, "GdiQueryTable() returns", MB_OK);
    }
}


BOOL KLocateGdiTablePage::DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
	    case WM_INITDIALOG:
			m_hWnd = hWnd;
            
			m_Regions.FromDlgItem(hWnd, IDC_REGIONS);
			
			m_Regions.AddIcon(LVSIL_SMALL, m_hInst, IDI_EMPTY);
            m_Regions.AddIcon(LVSIL_SMALL, m_hInst, IDI_EQUAL);
            m_Regions.AddIcon(LVSIL_SMALL, m_hInst, IDI_CHANGE);

			m_Regions.AddColumn(0, 62, "oldCRC");
			m_Regions.AddColumn(1, 46, "CRC");
                
            m_Regions.AddColumn(2, 76, "Base");
            m_Regions.AddColumn(3, 76, "Size");
            m_Regions.AddColumn(4, 60, "Type");
            m_Regions.AddColumn(5, 100, "Module");
			return TRUE;
		
		case WM_COMMAND:
			if (LOWORD(wParam) == IDC_QUERY)
			{
				m_Regions.DeleteAll();

				m_snapshot.Shot(& m_Regions);
				return TRUE;
			}
            else if ( LOWORD(wParam)==IDC_GDIQUERY )
            {
                GdiQueryTable();
                return TRUE;
            }
			break;

		case WM_NOTIFY:
			if (wParam == IDC_REGIONS)
			{
				NM_LISTVIEW * pInfo = (NM_LISTVIEW *) lParam;
				
				if ( (pInfo->hdr.code == NM_DBLCLK) && (pInfo->iItem != -1) )  
				{
					TCHAR Start[16], Size[16];

					m_Regions.GetItemText(pInfo->iItem, 2, Start, sizeof(Start));
					m_Regions.GetItemText(pInfo->iItem, 3, Size,  sizeof(Size));

					unsigned nStart, nSize;

					sscanf(Start, "%x", & nStart);
					sscanf(Size,  "%x", & nSize);

					m_snapshot.ShowDetail(m_hInst, nStart, nSize);
					return TRUE;
				}
			}
			break;

		case WM_DESTROY:
			m_Regions.DeleteAll();
			return TRUE;
    }
    
    return FALSE;
}

⌨️ 快捷键说明

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