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

📄 mainwnd.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 *	Gdi handle viewer
 *
 *	mainwnd.c
 *
 *	Copyright (C) 2007	Timo Kreuzer <timo <dot> kreuzer <at> web.de>
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "gdihv.h"

INT g_Separator;

INT_PTR CALLBACK
MainWindow_WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
		{
			RECT rect;

			SendMessage(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_MAIN)));
			GetClientRect(hMainWnd, &rect);
			g_Separator = (rect.right / 2);
			HandleList_Create(GetDlgItem(hMainWnd, IDC_HANDLELIST));
			ProcessList_Create(GetDlgItem(hMainWnd, IDC_PROCESSLIST));
			MainWindow_OnSize(hMainWnd);

			break;
		}
		case WM_SIZE:
		{
			MainWindow_OnSize(hMainWnd);
			break;
		}
		case WM_COMMAND:
		{
			switch (LOWORD(wParam))
			{
				case IDOK:
				case IDCANCEL:
				{
					EndDialog(hMainWnd, IDOK);
					break;
				}
				case IDC_REFRESHHANDLE:
				{
					LV_ITEM item;
					HWND hProcessListCtrl = GetDlgItem(hMainWnd, IDC_PROCESSLIST);
					memset(&item, 0, sizeof(LV_ITEM));
					item.mask = LVIF_PARAM;
					item.iItem = ListView_GetSelectionMark(hProcessListCtrl);
					(void)ListView_GetItem(hProcessListCtrl, &item);
					HandleList_Update(GetDlgItem(hMainWnd, IDC_HANDLELIST), (HANDLE)item.lParam);
					break;
				}
				case IDC_REFRESHPROCESS:
				{
					ProcessList_Update(GetDlgItem(hMainWnd, IDC_PROCESSLIST));
					break;
				}
				default:
				{
					return FALSE;
				}
			}
			break;
		}
		case WM_NOTIFY:
		{
			if (((LPNMLISTVIEW)lParam)->hdr.code == LVN_ITEMCHANGED
			        && (wParam == IDC_PROCESSLIST)
			        && (((LPNMLISTVIEW)lParam)->uNewState & LVIS_SELECTED)
			        && !(((LPNMLISTVIEW)lParam)->uOldState & LVIS_SELECTED))
			{
				LV_ITEM item;
				memset(&item, 0, sizeof(LV_ITEM));
				item.mask = LVIF_PARAM;
				item.iItem = ((LPNMLISTVIEW)lParam)->iItem;
				(void)ListView_GetItem(GetDlgItem(hMainWnd, IDC_PROCESSLIST), &item);
				HandleList_Update(GetDlgItem(hMainWnd, IDC_HANDLELIST), (HANDLE)item.lParam);
				return TRUE;
				break;
			}
		}
		default:
		{
			return FALSE;
		}
	}
	return TRUE;
}

VOID
MainWindow_OnSize(HWND hMainWnd)
{
	HWND hProcessListctrl, hHandleListCtrl, hProcessRefresh, hHandleRefresh;
	RECT rect;

	hProcessListctrl = GetDlgItem(hMainWnd, IDC_PROCESSLIST);
	hHandleListCtrl = GetDlgItem(hMainWnd, IDC_HANDLELIST);
	hProcessRefresh = GetDlgItem(hMainWnd, IDC_REFRESHPROCESS);
	hHandleRefresh = GetDlgItem(hMainWnd, IDC_REFRESHHANDLE);

	GetClientRect(hMainWnd, &rect);

//g_Separator = (rect.right / 2);
	MoveWindow(hProcessListctrl, 5, 5, g_Separator - 5, rect.bottom - 40, TRUE);
	MoveWindow(hHandleListCtrl, g_Separator + 5, 5, rect.right - g_Separator - 5, rect.bottom - 40, TRUE);
	MoveWindow(hProcessRefresh, g_Separator - 90, rect.bottom - 30, 90, 25, TRUE);
	MoveWindow(hHandleRefresh, rect.right - 90, rect.bottom - 30, 90, 25, TRUE);
	return;
}

⌨️ 快捷键说明

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