示例#1
0
/**
 * @brief WM_NOTIFY handler of Preview dialog.
 * @param hwnd - window handle.
 * @param idCtrl - identifier of the common control sending the message.
 * @param pnmh - pointer to an NMHDR structure that contains the notification code and additional information.
 */
static LRESULT PreviewDlg_OnNotify(HWND hwnd, int idCtrl, LPNMHDR pnmh)
{
	switch (pnmh->code)
	{
	case LVN_ITEMCHANGED:
		{
			if (idCtrl != IDC_FILESLIST)
				break;
			LPNMLISTVIEW pnmv = (LPNMLISTVIEW)pnmh;
			if ((pnmv->uNewState & LVIS_SELECTED) != (pnmv->uOldState & LVIS_SELECTED))
			{
				if (pnmv->uNewState & LVIS_SELECTED)
				{
					_ASSERTE(g_hFile == INVALID_HANDLE_VALUE && g_hBitmap == NULL);
					HWND hwndFileList = GetDlgItem(hwnd, IDC_FILESLIST);
					LVITEM lvi;
					ZeroMemory(&lvi, sizeof(lvi));
					lvi.mask = LVIF_PARAM;
					lvi.iItem = pnmv->iItem;
					ListView_GetItem(hwndFileList, &lvi);
					FILE_ITEM_INFO* pFileItemInfo = (FILE_ITEM_INFO*)lvi.lParam;
					if (pFileItemInfo != NULL)
					{
						CWaitCursor wait(true);
						if (! OpenImageFile(hwnd, pFileItemInfo->szFileName))
							OpenRegularFile(hwnd, pFileItemInfo->szFileName);
					}
				}
				else
					CloseViewPane(hwnd);
			}
		}
		break;
	case LVN_COLUMNCLICK:
		{
			if (idCtrl != IDC_FILESLIST)
				break;
			LPNMLISTVIEW pnmv = (LPNMLISTVIEW)pnmh;
			HWND hwndFileList = GetDlgItem(hwnd, IDC_FILESLIST);
			g_FilesListOrder.ToggleSortParams(hwndFileList, pnmv->iSubItem);
			LISTVIEW_SORT_PARAMS lvSortParams;
			lvSortParams.hwndList = hwndFileList;
			lvSortParams.iColumnNumber = pnmv->iSubItem;
			lvSortParams.bAscending = g_FilesListOrder.GetSortOrder();
			switch (pnmv->iSubItem)
			{
			case CID_FILE_NAME:
			case CID_FILE_TYPE:
				lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_STRING;
				ListView_SortItemsEx(hwndFileList, &ListViewCompareFunc, (LPARAM)&lvSortParams);
				break;
			case CID_FILE_SIZE:
				lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_INTEGER;
				ListView_SortItems(hwndFileList, &FileSizeCompareFunc, (LPARAM)&lvSortParams);
				break;
			}
		}
		break;
	case TTN_GETDISPINFO:
		{
			LPTOOLTIPTEXT ptt = (LPTOOLTIPTEXT)pnmh;
			ptt->hinst = g_hInstance;
			ptt->uFlags |= TTF_DI_SETITEM;
			switch (ptt->hdr.idFrom)
			{
			case IDC_ZOOMIN:
				ptt->lpszText = MAKEINTRESOURCE(IDS_ZOOMIN);
				break;
			case IDC_ZOOMOUT:
				ptt->lpszText = MAKEINTRESOURCE(IDS_ZOOMOUT);
				break;
			case IDC_RESETSIZE:
				ptt->lpszText = MAKEINTRESOURCE(IDS_RESETSIZE);
				break;
			case IDC_FITIMAGE:
				ptt->lpszText = MAKEINTRESOURCE(IDS_FITIMAGE);
				break;
			}
		}
		break;
	}
	return FALSE;
}
示例#2
0
/**
 * @brief WM_NOTIFY handler of Machine State dialog.
 * @param hwnd - window handle.
 * @param idCtrl - identifier of the common control sending the message.
 * @param pnmh - pointer to an NMHDR structure that contains the notification code and additional information.
 */
static LRESULT MachineStateDlg_OnNotify(HWND hwnd, int idCtrl, LPNMHDR pnmh)
{
    switch (pnmh->code)
    {
    case LVN_ITEMCHANGED:
    {
        if (idCtrl != IDC_PROCESS_LIST)
            break;
        LPNMLISTVIEW pnmv = (LPNMLISTVIEW)pnmh;
        if ((pnmv->uNewState & LVIS_SELECTED) != (pnmv->uOldState & LVIS_SELECTED))
        {
            if (pnmv->uNewState & LVIS_SELECTED)
            {
                CWaitCursor wait(true);
                HWND hwndModuleList = GetDlgItem(hwnd, IDC_PROCESS_MODULES_LIST);
                SendMessage(hwndModuleList, WM_SETREDRAW, FALSE, 0);
                DisplayWaitBanner(hwndModuleList);

                LVITEM lvi;
                ZeroMemory(&lvi, sizeof(lvi));
                lvi.mask = LVIF_TEXT;
                CEnumProcess::CModuleEntry module;
                if (g_pEnumProc->GetModuleFirst((DWORD)pnmv->lParam, module))
                {
                    int iItemPos = 0;
                    do
                    {
                        lvi.iItem = iItemPos;
                        lvi.pszText = module.m_szModuleName;
                        ListView_InsertItem(hwndModuleList, &lvi);
                        TCHAR szVersionString[64];
                        if (CSymEngine::GetVersionString(module.m_szModuleName, szVersionString, countof(szVersionString)))
                            ListView_SetItemText(hwndModuleList, iItemPos, CID_MODULE_VERSION, szVersionString);
                        TCHAR szTempBuf[32];
#if defined _WIN64
                        _stprintf_s(szTempBuf, countof(szTempBuf), _T("%016X"), (DWORD_PTR)module.m_pLoadBase);
#elif defined _WIN32
                        _stprintf_s(szTempBuf, countof(szTempBuf), _T("%08X"), (DWORD_PTR)module.m_pLoadBase);
#endif
                        ListView_SetItemText(hwndModuleList, iItemPos, CID_MODULE_BASE, szTempBuf);
                        ++iItemPos;
                    }
                    while (g_pEnumProc->GetModuleNext((DWORD)pnmv->lParam, module));
                }
                else
                {
                    TCHAR szMessage[100];
                    LoadString(g_hInstance, IDS_ERROR_NOT_AVAILABLE, szMessage, countof(szMessage));
                    lvi.iItem = 0;
                    lvi.pszText = szMessage;
                    ListView_InsertItem(hwndModuleList, &lvi);
                }

                SendMessage(hwndModuleList, WM_SETREDRAW, TRUE, 0);
                InvalidateRect(hwndModuleList, NULL, TRUE);
            }
            else
            {
                HWND hwndModuleList = GetDlgItem(hwnd, IDC_PROCESS_MODULES_LIST);
                ListView_DeleteAllItems(hwndModuleList);
            }
        }
    }
    break;
    case LVN_COLUMNCLICK:
    {
        LPNMLISTVIEW pnmv = (LPNMLISTVIEW)pnmh;
        if (idCtrl == IDC_PROCESS_LIST)
        {
            HWND hwndProcessList = GetDlgItem(hwnd, IDC_PROCESS_LIST);
            g_ProcessListOrder.ToggleSortParams(hwndProcessList, pnmv->iSubItem);
            LISTVIEW_SORT_PARAMS lvSortParams;
            lvSortParams.hwndList = hwndProcessList;
            lvSortParams.iColumnNumber = pnmv->iSubItem;
            lvSortParams.bAscending = g_ProcessListOrder.GetSortOrder();
            switch (pnmv->iSubItem)
            {
            case CID_PROCESS_ID:
                lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_INTEGER;
                break;
            case CID_PROCESS_NAME:
                lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_STRING;
                break;
            }
            ListView_SortItemsEx(hwndProcessList, &ListViewCompareFunc, (LPARAM)&lvSortParams);
        }
        else if (idCtrl == IDC_PROCESS_MODULES_LIST)
        {
            HWND hwndModuleList = GetDlgItem(hwnd, IDC_PROCESS_MODULES_LIST);
            g_ModulesListOrder.ToggleSortParams(hwndModuleList, pnmv->iSubItem);
            LISTVIEW_SORT_PARAMS lvSortParams;
            lvSortParams.hwndList = hwndModuleList;
            lvSortParams.iColumnNumber = pnmv->iSubItem;
            lvSortParams.bAscending = g_ModulesListOrder.GetSortOrder();
            switch (pnmv->iSubItem)
            {
            case CID_MODULE_NAME:
            case CID_MODULE_VERSION:
                lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_STRING;
                break;
            case CID_MODULE_BASE:
                lvSortParams.eCompareType = LISTVIEW_SORT_PARAMS::ICT_HEXADECIMAL;
                break;
            }
            ListView_SortItemsEx(hwndModuleList, &ListViewCompareFunc, (LPARAM)&lvSortParams);
        }
    }
    break;
    }
    return FALSE;
}