Beispiel #1
0
BOOL ProjectPanel::setImageList(int root_clean_id, int root_dirty_id, int project_id, int open_node_id, int closed_node_id, int leaf_id, int ivalid_leaf_id) 
{
	HBITMAP hbmp;

	const int nbBitmaps = 7;

	// Creation of image list
	if ((_hImaLst = ImageList_Create(CX_BITMAP, CY_BITMAP, ILC_COLOR32 | ILC_MASK, nbBitmaps, 0)) == NULL) 
		return FALSE;

	// Add the bmp in the list
	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(root_clean_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(root_dirty_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(project_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(open_node_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(closed_node_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(leaf_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	hbmp = LoadBitmap(_hInst, MAKEINTRESOURCE(ivalid_leaf_id));
	if (hbmp == NULL)
		return FALSE;
	ImageList_Add(_hImaLst, hbmp, (HBITMAP)NULL);
	DeleteObject(hbmp);

	if (ImageList_GetImageCount(_hImaLst) < nbBitmaps)
		return FALSE;

	// Set image list to the tree view
	TreeView_SetImageList(_treeView.getHSelf(), _hImaLst, TVSIL_NORMAL);

	return TRUE;
}
Beispiel #2
0
/*
* MainWindowHandleWMNotify
*
* Purpose:
*
* Main window WM_NOTIFY handler.
*
*/
LRESULT MainWindowHandleWMNotify(
	_In_ HWND hwnd,
	_In_ WPARAM wParam,
	_In_ LPARAM lParam
	)
{
	INT				c, k;
	LPNMHDR			hdr = (LPNMHDR)lParam;
	LPTOOLTIPTEXT	lpttt;
	LPNMLISTVIEW	lvn;
	LPNMTREEVIEW	lpnmTreeView;
	LPWSTR			str;
	SIZE_T			lcp;
	LVITEMW			lvitem;
	LVCOLUMNW		col;
	TVHITTESTINFO	hti;
	POINT			pt;
	WCHAR			item_string[MAX_PATH + 1];

	UNREFERENCED_PARAMETER(wParam);

	if (hdr) {

		if (hdr->hwndFrom == ObjectTree) {
			switch (hdr->code) {
			case TVN_ITEMEXPANDED:
			case TVN_SELCHANGED:
				SetFocus(ObjectTree);
				supSetWaitCursor(TRUE);
				MainWindowTreeViewSelChanged((LPNMTREEVIEWW)lParam);
				SendMessageW(StatusBar, WM_SETTEXT, 0, (LPARAM)CurrentObjectPath);

				g_enumParams.lpSubDirName = CurrentObjectPath;
				ListObjectsInDirectory(&g_enumParams);

				ListView_SortItemsEx(ObjectList, &MainWindowObjectListCompareFunc, SortColumn);

				supSetWaitCursor(FALSE);

				lpnmTreeView = (LPNMTREEVIEW)lParam;
				if (lpnmTreeView) {
					SelectedTreeItem = lpnmTreeView->itemNew.hItem;
				}
				break;

			case NM_RCLICK:
				GetCursorPos(&pt);
				hti.pt = pt;
				ScreenToClient(hdr->hwndFrom, &hti.pt);
				if (TreeView_HitTest(hdr->hwndFrom, &hti) &&
					(hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT))) {
					SelectedTreeItem = hti.hItem;
					if (hdr->code == NM_RCLICK) {
						TreeView_SelectItem(ObjectTree, SelectedTreeItem);
						SendMessageW(StatusBar, WM_SETTEXT, 0, (LPARAM)CurrentObjectPath);
						supHandleTreePopupMenu(hwnd, &pt);
					}
				}
				break;
			}
		}

		if (hdr->hwndFrom == ObjectList) {
			switch (hdr->code) {
			case NM_SETFOCUS:
				if (ListView_GetSelectionMark(ObjectList) == -1) {
					lvitem.mask = LVIF_STATE;
					lvitem.iItem = 0;
					lvitem.state = LVIS_SELECTED | LVIS_FOCUSED;
					lvitem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
					ListView_SetItem(ObjectList, &lvitem);
				}

				break;
			case LVN_ITEMCHANGED:
				lvn = (LPNMLISTVIEW)lParam;
				RtlSecureZeroMemory(&item_string, sizeof(item_string));
				ListView_GetItemText(ObjectList, lvn->iItem, 0, item_string, MAX_PATH);
				lcp = _strlen(CurrentObjectPath);
				str = HeapAlloc(GetProcessHeap(), 0, (lcp + _strlen(item_string) + 4) * sizeof(WCHAR));
				if (str == NULL)
					break;
				_strcpy(str, CurrentObjectPath);

				if ((str[0] == '\\') && (str[1] == 0)) {
					_strcpy(str + lcp, item_string);
				}
				else {
					str[lcp] = '\\';
					_strcpy(str + lcp + 1, item_string);
				}
				SendMessageW(StatusBar, WM_SETTEXT, 0, (LPARAM)str);
				HeapFree(GetProcessHeap(), 0, str);
				break;

				//handle sort by column
			case LVN_COLUMNCLICK:
				bSortInverse = !bSortInverse;
				SortColumn = ((NMLISTVIEW *)lParam)->iSubItem;
				ListView_SortItemsEx(ObjectList, &MainWindowObjectListCompareFunc, SortColumn);

				RtlSecureZeroMemory(&col, sizeof(col));
				col.mask = LVCF_IMAGE;
				col.iImage = -1;

				for (c = 0; c < 3; c++)
					ListView_SetColumn(ObjectList, c, &col);

				k = ImageList_GetImageCount(ListViewImages);
				if (bSortInverse)
					col.iImage = k - 2;
				else
					col.iImage = k - 1;

				ListView_SetColumn(ObjectList, ((NMLISTVIEW *)lParam)->iSubItem, &col);

				break;
			case NM_CLICK:
				c = ((LPNMITEMACTIVATE)lParam)->iItem;
				EnableMenuItem(GetSubMenu(GetMenu(hwnd), 2), ID_OBJECT_GOTOLINKTARGET,
					(supIsSymlink(c)) ? MF_BYCOMMAND : MF_BYCOMMAND | MF_GRAYED);
				break;

			case NM_DBLCLK:
				MainWindowHandleObjectListProp(hwnd);
				break;

			default:
				break;
			}
		}

		//handle tooltip
		if (hdr->code == TTN_GETDISPINFO) {
			lpttt = (LPTOOLTIPTEXT)lParam;

			switch (lpttt->hdr.idFrom) {

			case ID_OBJECT_PROPERTIES:
			case ID_VIEW_REFRESH:
			case ID_FIND_FINDOBJECT:
				lpttt->hinst = g_hInstance;
				lpttt->lpszText = MAKEINTRESOURCE(lpttt->hdr.idFrom);
				lpttt->uFlags |= TTF_DI_SETITEM;
				break;

			default:
				break;

			}
		}
	}
	return FALSE;
}
Beispiel #3
0
/*
* WinObjExMain
*
* Purpose:
*
* Actual program entry point.
*
*/
void WinObjExMain()
{
	MSG						msg1;
	WNDCLASSEX				wincls;
	BOOL					IsFullAdmin = FALSE, rv = TRUE, cond = FALSE;
	ATOM					class_atom = 0;
	INITCOMMONCONTROLSEX	icc;
	LVCOLUMNW				col;
	SHSTOCKICONINFO			sii;
	HMENU					hMenu;
	HACCEL					hAccTable = 0;
	WCHAR					szWindowTitle[100];
	HANDLE					tmpb;


#ifdef _DEBUG
	TestPrivateNamespace();
	//TestIoCompletion();
	//TestTimer();
	//TestTransaction();
#endif

	pHtmlHelpW = NULL;
	CurrentObjectPath = NULL;
	bSortInverse = FALSE;
	g_hInstance = GetModuleHandle(NULL);
	RtlSecureZeroMemory(szWindowTitle, sizeof(szWindowTitle));

	//clear dialogs array
	RtlSecureZeroMemory(g_wobjDialogs, sizeof(g_wobjDialogs));

	// do not move anywhere
	IsFullAdmin = supUserIsFullAdmin();
	supInit(IsFullAdmin);

	//create main window and it components
	wincls.cbSize = sizeof(WNDCLASSEX);
	wincls.style = 0;
	wincls.lpfnWndProc = &MainWindowProc;
	wincls.cbClsExtra = 0;
	wincls.cbWndExtra = 0;
	wincls.hInstance = g_hInstance;
	wincls.hIcon = (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ICON_MAIN), IMAGE_ICON, 0, 0, LR_SHARED);
	wincls.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(OCR_SIZEWE), IMAGE_CURSOR, 0, 0, LR_SHARED);
	wincls.hbrBackground = NULL;
	wincls.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
	wincls.lpszClassName = MAINWINDOWCLASSNAME;
	wincls.hIconSm = 0;

	do {
		class_atom = RegisterClassEx(&wincls);
		if (class_atom == 0)
			break;

		_strcpy(szWindowTitle, PROGRAM_NAME);
		if (IsFullAdmin != FALSE) {
			_strcat(szWindowTitle, L" (Administrator)");
		}

		MainWindow = CreateWindowEx(0, MAKEINTATOM(class_atom), szWindowTitle,
			WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, g_hInstance, NULL);
		if (MainWindow == NULL)
			break;

		icc.dwSize = sizeof(icc);
		icc.dwICC = ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_BAR_CLASSES | ICC_TAB_CLASSES;
		if (!InitCommonControlsEx(&icc))
			break;

		StatusBar = CreateWindowEx(0, STATUSCLASSNAME, NULL,
			WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, MainWindow, (HMENU)1001, g_hInstance, NULL);

		ObjectTree = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, NULL,
			WS_VISIBLE | WS_CHILD | WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_HASBUTTONS | 
			TVS_HASLINES | TVS_LINESATROOT, 0, 0, 0, 0, MainWindow, (HMENU)1002, g_hInstance, NULL);

		if (ObjectTree == NULL)
			break;

		ObjectList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
			WS_VISIBLE | WS_CHILD | WS_TABSTOP | LVS_AUTOARRANGE | LVS_REPORT | 
			LVS_SHOWSELALWAYS | LVS_SINGLESEL | LVS_SHAREIMAGELISTS, 0, 0, 0, 0, 
			MainWindow, (HMENU)1003, g_hInstance, NULL);

		if (ObjectList == NULL)
			break;

		ToolBar1 = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
			WS_VISIBLE | WS_CHILD | CCS_TOP | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | 
			TBSTYLE_TOOLTIPS, 0, 0, 0, 0, MainWindow, (HMENU)1004, g_hInstance, NULL);

		if (ToolBar1 == NULL)
			break;

		Splitter = CreateWindowEx(0, WC_STATIC, NULL,
			WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, MainWindow, (HMENU)1005, g_hInstance, NULL);

		// initialization of views
		SendMessage(MainWindow, WM_SIZE, 0, 0);
		ListView_SetExtendedListViewStyle(ObjectList, 
			LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_LABELTIP | LVS_EX_DOUBLEBUFFER);

		// set tree imagelist
		TreeViewImages = supLoadImageList(g_hInstance, IDI_ICON_VIEW_DEFAULT, IDI_ICON_VIEW_SELECTED);
		if (TreeViewImages) {
			TreeView_SetImageList(ObjectTree, TreeViewImages, TVSIL_NORMAL);
		}

		//insert run as admin menu entry
		if (IsFullAdmin == FALSE) {
			hMenu = GetSubMenu(GetMenu(MainWindow), 0);
			InsertMenu(hMenu, 0, MF_BYPOSITION, ID_FILE_RUNASADMIN, T_RUNASADMIN);
			InsertMenu(hMenu, 1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
			//set menu shield icon
			RtlSecureZeroMemory(&sii, sizeof(sii));
			sii.cbSize = sizeof(sii);
			if (SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGFI_SMALLICON, &sii) == S_OK) {
				supSetMenuIcon(hMenu, ID_FILE_RUNASADMIN, (ULONG_PTR)sii.hIcon);
			}
		}

		//load listview images
		ListViewImages = supLoadImageList(g_hInstance, IDI_ICON_DEVICE, IDI_ICON_UNKNOWN);
		if (ListViewImages) {
			tmpb = LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ICON_SORTUP), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
			if (tmpb) {
				ImageList_ReplaceIcon(ListViewImages, -1, tmpb);
				DestroyIcon(tmpb);
			}
			tmpb = LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ICON_SORTDOWN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
			if (tmpb) {
				ImageList_ReplaceIcon(ListViewImages, -1, tmpb);
				DestroyIcon(tmpb);
			}
			ListView_SetImageList(ObjectList, ListViewImages, LVSIL_SMALL);
		}

		//load toolbar images
		ToolBarMenuImages = ImageList_LoadImage(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1), 
			16, 7, CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION);

		if (ToolBarMenuImages) {

			supCreateToolbarButtons(ToolBar1);

			//set menu icons
			hMenu = GetSubMenu(GetMenu(MainWindow), 1);
			if (hMenu) {
				supSetMenuIcon(hMenu, ID_VIEW_REFRESH,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ToolBarMenuImages, 1));
			}
			hMenu = GetSubMenu(GetMenu(MainWindow), 2);
			if (hMenu && ListViewImages) {
				supSetMenuIcon(hMenu, ID_OBJECT_PROPERTIES,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ToolBarMenuImages, 0));
				supSetMenuIcon(hMenu, ID_OBJECT_GOTOLINKTARGET,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ListViewImages, 
					ID_FROM_VALUE(IDI_ICON_SYMLINK)));
			}

			//set object -> find object menu image
			hMenu = GetSubMenu(GetMenu(MainWindow), 3);
			if (hMenu) {
				supSetMenuIcon(hMenu, ID_FIND_FINDOBJECT,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ToolBarMenuImages, 2));
			}

			//set extras-pipe menu image
			hMenu = GetSubMenu(GetMenu(MainWindow), 4);
			if (hMenu) {
				supSetMenuIcon(hMenu, ID_EXTRAS_PIPES,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ToolBarMenuImages, 6));
			}

			//set help menu image
			hMenu = GetSubMenu(GetMenu(MainWindow), 5);
			if (hMenu) {
				supSetMenuIcon(hMenu, ID_HELP_HELP,
					(ULONG_PTR)ImageList_ExtractIcon(g_hInstance, ToolBarMenuImages, 3));
			}

		}

		hAccTable = LoadAccelerators(g_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));

		//create ObjectList columns
		RtlSecureZeroMemory(&col, sizeof(col));
		col.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT | LVCF_WIDTH | LVCF_ORDER | LVCF_IMAGE;
		col.iSubItem = 1;
		col.pszText = L"Name";
		col.fmt = LVCFMT_LEFT | LVCFMT_BITMAP_ON_RIGHT;
		col.iOrder = 0;
		col.iImage = -1;
		if (ListViewImages) {
			col.iImage = ImageList_GetImageCount(ListViewImages) - 1;
		}
		col.cx = 300;
		ListView_InsertColumn(ObjectList, 1, &col);

		col.iSubItem = 2;
		col.pszText = L"Type";
		col.iOrder = 1;
		col.iImage = -1;
		col.cx = 100;
		ListView_InsertColumn(ObjectList, 2, &col);

		col.iSubItem = 3;
		col.pszText = L"Additional Information";
		col.iOrder = 2;
		col.iImage = -1;
		col.cx = 170;
		ListView_InsertColumn(ObjectList, 3, &col);

		ListObjectDirectoryTree(L"\\", NULL, NULL);

		TreeView_SelectItem(ObjectTree, TreeView_GetRoot(ObjectTree));
		SetFocus(ObjectTree);

		do {
			rv = GetMessage(&msg1, NULL, 0, 0);

			if (rv == -1)
				break;

			if (MainDlgMsgHandler(msg1)) 
				continue;

			if (IsDialogMessage(MainWindow, &msg1)) {
				TranslateAccelerator(MainWindow, hAccTable, &msg1);
				continue;
			}

			TranslateMessage(&msg1);
			DispatchMessage(&msg1);
		} while (rv != 0);

	} while (cond);

	if (class_atom != 0)
		UnregisterClass(MAKEINTATOM(class_atom), g_hInstance);

	//do not move anywhere
	
	supShutdown();

#ifdef _DEBUG
	if (hObject) NtClose(hObject);

	if (g_hMutex != NULL) {
		CloseHandle(g_hMutex);
	}
	if (g_hNamespace != NULL) {
		ClosePrivateNamespace(g_hNamespace, PRIVATE_NAMESPACE_FLAG_DESTROY);
	}

#endif
}
Beispiel #4
0
bool CIconList::Initialize()
{
	bool lbOk = true;

	if (!mh_TabIcons)
	{
		int iSysX = GetSystemMetrics(SM_CXSMICON), iSysY = GetSystemMetrics(SM_CYSMICON);
		int iFontY = gpSetCls->EvalSize(gpSet->nTabFontHeight, esf_Vertical|esf_CanUseUnits|esf_CanUseDpi|esf_CanUseZoom);
		if (iFontY < 0)
			iFontY = gpSetCls->EvalFontHeight(gpSet->sTabFontFace, iFontY, gpSet->nTabFontHeight);
		int iDpyY = gpSetCls->EvalSize(max(16,iSysY), esf_Vertical|esf_CanUseDpi);
		mn_CxIcon = 16; mn_CyIcon = 16;
		if (iFontY > 16)
		{
			if (iDpyY <= iFontY)
			{
				mn_CxIcon = gpSetCls->EvalSize(max(16,iSysX), esf_Horizontal|esf_CanUseDpi);
				mn_CyIcon = iDpyY;
			}
			else
			{
				// Issue 1939: Tab bar height too big since version 150307
				int iSizes[] = {20, 24, 28, 32, 40, 48, 60, 64};
				iFontY++; // Allow one pixes larger...
				for (INT_PTR j = countof(iSizes)-1; j >= 0; j--)
				{
					if (iFontY >= iSizes[j])
					{
						mn_CyIcon = iSizes[j];
						mn_CxIcon = (iSysX * iSizes[j]) / iSysY;
						break;
					}
				}
			}
		}

		wchar_t szLog[100];
		_wsprintf(szLog, SKIPCOUNT(szLog) L"Creating IconList for size {%ix%i} SysIcon size is {%ix%i}", mn_CxIcon, mn_CyIcon, iSysX, iSysY);
		gpConEmu->LogString(szLog);

		if ((mh_TabIcons = ImageList_Create(mn_CxIcon, mn_CyIcon, ILC_COLOR24|ILC_MASK, 0, 16)) != NULL)
		{
			CToolImg img;
			int nFirstAdd = -1;
			const int iShieldButtons = 4;
			if (img.Create(mn_CxIcon, mn_CyIcon, iShieldButtons, GetSysColor(COLOR_BTNFACE)))
			{
				if (img.AddButtons(g_hInstance, IDB_SHIELD16, iShieldButtons))
				{
					HBITMAP hShieldUser = img.GetBitmap();
					#ifdef _DEBUG
					BITMAP bmi = {};
					GetObject(hShieldUser, sizeof(bmi), &bmi);
					#ifdef _DEBUG
					//SaveImageEx(L"T:\\ShieldUser.png", hShieldUser);
					#endif
					#endif

					nFirstAdd = ImageList_AddMasked(mh_TabIcons, hShieldUser, RGB(128,0,0));
				}
			}

			#ifdef _DEBUG
			int iCount = ImageList_GetImageCount(mh_TabIcons);
			_ASSERTE(iCount==4);
			IMAGEINFO ii = {}; BOOL b;
			// An application should not call DeleteObject to destroy the bitmaps retrieved by ImageList_GetImageInfo
			b = ImageList_GetImageInfo(mh_TabIcons, 0, &ii);
			b = ImageList_GetImageInfo(mh_TabIcons, 1, &ii);
			#endif

			if (nFirstAdd >= 0)
			{
				mn_AdminIcon = nFirstAdd + ((gOSVer.dwMajorVersion >= 6) ? 0 : 1);
			}
			else
			{
				lbOk = false;
			}
		}
		else
		{
			lbOk = false;
		}
	}

	return lbOk;
}
Beispiel #5
0
HIMAGELIST
SdkCreateGrayImageList(
	IN HIMAGELIST himlNormal
	)
{
	int Count, i;
	int Width, Height;
	HIMAGELIST himlGray;
	HDC hdcDesktop;
	HDC hdcMem;
	RECT rc;
	COLORREF crMask;
	HPALETTE hpal;
	UINT index;
	HGDIOBJ hbm;
	HGDIOBJ hbmOld;
	COLORREF rgb;
	BYTE gray;
	HWND hWnd;
	int x, y;

	Count = ImageList_GetImageCount(himlNormal);
	if (Count == 0) {
		return NULL;
	}

	ImageList_GetIconSize(himlNormal, &Width, &Height);
	himlGray = ImageList_Create(Width, Height, ILC_COLOR24 | ILC_MASK, Count, 0);

	hdcDesktop = GetDC(NULL);
	hdcMem = CreateCompatibleDC(NULL);
	
	rc.top = rc.left = 0;
	rc.bottom = Height;
	rc.right = Width;
	crMask = RGB(200, 199, 200);

	if (GetDeviceCaps(hdcDesktop, BITSPIXEL) < 24) {
		hpal = (HPALETTE)GetCurrentObject(hdcDesktop, OBJ_PAL);
		index = GetNearestPaletteIndex(hpal, crMask);
		if (index != CLR_INVALID) { 
			crMask = PALETTEINDEX(index);
		}
	}

	for (i = 0 ; i < Count; ++i) {

		hbm = CreateCompatibleBitmap(hdcDesktop, Width, Height);
		hbmOld = SelectObject(hdcMem, hbm);

		SdkFillSolidRect(hdcMem, crMask, &rc);

		ImageList_SetBkColor(himlNormal, crMask);
		ImageList_Draw(himlNormal, i, hdcMem, 0, 0, ILD_NORMAL);

		for (x = 0 ; x < Width; ++x) {
			for (y = 0; y < Height; ++y) {
				rgb = GetPixel(hdcMem, x, y);
				if (rgb != crMask) { 
					gray = (BYTE) (95 + (GetRValue(rgb) * 3 + GetGValue(rgb) * 6 + GetBValue(rgb)) / 20);
					SetPixel(hdcMem, x, y, RGB(gray, gray, gray));
				}
			}
		}

		hbm = SelectObject(hdcMem, hbmOld);
		ImageList_AddMasked(himlGray, (HBITMAP)hbm, crMask);
		DeleteObject(hbm);
	}

	DeleteDC(hdcMem);
	hWnd = WindowFromDC(hdcDesktop);
	ReleaseDC(hWnd, hdcDesktop);

	return himlGray; 
}
Beispiel #6
0
// Returns the number of images in the image list.
int wxImageList::GetImageCount() const
{
    wxASSERT_MSG( m_hImageList, wxT("invalid image list") );

    return ImageList_GetImageCount(GetHImageList());
}
void CXTPHeaderCtrlTheme::OnDrawItemBitmap(LPDRAWITEMSTRUCT lpDIS, CRect& rcText, CXTPHeaderCtrl* pHeaderCtrl)
{
	ASSERT_VALID(pHeaderCtrl);

	HDITEM hdi;
	hdi.mask = HDI_BITMAP | HDI_FORMAT | HDI_IMAGE;
	pHeaderCtrl->GetItem(lpDIS->itemID, &hdi);

	HIMAGELIST hImageList = 0;
	int nIndex = -1;

	if (hdi.fmt & HDF_BITMAP && hdi.hbm != NULL)
	{
		hImageList = (HIMAGELIST)hdi.hbm;
		nIndex = 0;
	}
	else if (hdi.fmt & HDF_IMAGE)
	{
		hImageList = (HIMAGELIST)pHeaderCtrl->SendMessage(HDM_GETIMAGELIST);
		nIndex = hdi.iImage;
	}

	if (nIndex != -1 && (hdi.fmt & HDF_IMAGE) && pHeaderCtrl->GetImageManager())
	{
		CXTPImageManagerIcon* pIcon = pHeaderCtrl->GetImageManager()->GetImage(nIndex, 0);

		if (pIcon)
		{
			CRect rcItem(lpDIS->rcItem);
			CPoint point(rcText.left,  (rcItem.Height() - pIcon->GetHeight()) / 2);

			rcText.left += pIcon->GetWidth() + m_sizePadding.cx;

			XTPImageState imageState = (lpDIS->itemState & ODS_SELECTED) ? xtpImageChecked :
				(lpDIS->itemState & ODS_HOTLIGHT) ? xtpImageHot : xtpImageNormal;

			if (lpDIS->itemState == ODS_SELECTED)
				point.Offset(1, 1);

			if (point.x + pIcon->GetWidth() > lpDIS->rcItem.right)
				return;

			// draw image transparently.
			pIcon->Draw(CDC::FromHandle(lpDIS->hDC), point, pIcon->GetIcon(imageState));

			return;
		}
	}

	if (hImageList)
	{
		int cx, cy;
		if (::ImageList_GetIconSize(hImageList, &cx, &cy) && (nIndex < ImageList_GetImageCount(hImageList)))
		{
			CRect rcItem(lpDIS->rcItem);
			CPoint point(rcText.left,  (rcItem.Height() - cy) / 2);

			rcText.left += cx + m_sizePadding.cx;

			if (lpDIS->itemState == ODS_SELECTED)
				point.Offset(1, 1);

			if (point.x + cx > lpDIS->rcItem.right)
				return;

			// draw image transparently.
			::ImageList_Draw(hImageList, nIndex, lpDIS->hDC, point.x, point.y, ILD_TRANSPARENT);
		}
	}
}
Beispiel #8
0
int CCImageList::GetCount()
{
    return ImageList_GetImageCount(m_hImageList);
}
Beispiel #9
0
INT_PTR CALLBACK DlgProcFiltering(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HANDLE hItemAll;
    switch (msg)
    {
    case WM_INITDIALOG:
    {
        TranslateDialogDefault(hwndDlg);

        HIMAGELIST hImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), IsWinVerXPPlus() ? ILC_COLOR32 : ILC_COLOR16 | ILC_MASK, 3, 3);

        ImageList_AddIcon(hImageList, LoadIcon(hInst,MAKEINTRESOURCE(IDI_SOUND)));
        SendDlgItemMessage(hwndDlg,IDC_SOUNDICON,STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_SOUND, ILD_NORMAL), 0);
        ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_POPUP)));
        SendDlgItemMessage(hwndDlg, IDC_POPUPICON, STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_POPUP, ILD_NORMAL), 0);
        ImageList_AddIcon(hImageList, LoadIcon(hInst,MAKEINTRESOURCE(IDI_XSTATUS)));
        SendDlgItemMessage(hwndDlg, IDC_XSTATUSICON, STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_XSTATUS, ILD_NORMAL), 0);
        ImageList_AddIcon(hImageList, LoadIcon(hInst,MAKEINTRESOURCE(IDI_LOGGING)));
        SendDlgItemMessage(hwndDlg, IDC_LOGGINGICON, STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_LOGGING, ILD_NORMAL), 0);
        ImageList_AddIcon(hImageList, LoadIcon(hInst,MAKEINTRESOURCE(IDI_DISABLEALL)));
        SendDlgItemMessage(hwndDlg, IDC_DISABLEALLICON, STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_DISABLEALL, ILD_NORMAL), 0);
        ImageList_AddIcon(hImageList, LoadIcon(hInst,MAKEINTRESOURCE(IDI_ENABLEALL)));
        SendDlgItemMessage(hwndDlg, IDC_ENABLEALLICON, STM_SETICON, (WPARAM)ImageList_GetIcon(hImageList, EXTRA_IMAGE_ENABLEALL, ILD_NORMAL), 0);

        ImageList_AddIcon(hImageList, LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT));

        SendDlgItemMessage(hwndDlg, IDC_INDSNDLIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hImageList);
        SendDlgItemMessage(hwndDlg, IDC_INDSNDLIST, CLM_SETEXTRACOLUMNS, 6, 0);

        HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
        ResetListOptions(hList);

        CLCINFOITEM cii = {0};
        cii.cbSize = sizeof(cii);
        cii.flags = CLCIIF_GROUPFONT;
        cii.pszText = TranslateT("** All contacts **");
        hItemAll = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_INDSNDLIST, CLM_ADDINFOITEM, 0, (LPARAM)&cii);

        return TRUE;
    }
    case WM_SETFOCUS:
    {
        SetFocus(GetDlgItem(hwndDlg, IDC_INDSNDLIST));
        break;
    }
    case WM_NOTIFY:
    {
        HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST);
        switch(((LPNMHDR)lParam)->idFrom)
        {
        case IDC_INDSNDLIST:
            switch (((LPNMHDR)lParam)->code)
            {
            case CLN_NEWCONTACT:
            case CLN_LISTREBUILT:
                SetAllContactsIcons(hList);
            //fall through
            case CLN_CONTACTMOVED:
                SetGroupsIcons(hList, (HANDLE)SendMessage(hList, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, NULL);
                break;
            case CLN_OPTIONSCHANGED:
                ResetListOptions(hList);
                break;
            case NM_CLICK:
            {
                NMCLISTCONTROL *nm = (NMCLISTCONTROL*)lParam;
                DWORD hitFlags;

                // Make sure we have an extra column
                if (nm->iColumn == -1) break;

                // Find clicked item
                HANDLE hItem = (HANDLE)SendMessage(hList, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x, nm->pt.y));
                if (hItem == NULL) break;
                if(!(hitFlags & CLCHT_ONITEMEXTRA)) break;

                int itemType = SendMessage(hList, CLM_GETITEMTYPE, (WPARAM)hItem, 0);

                // Get image in clicked column
                int image = GetExtraImage(hList, hItem, nm->iColumn);
                if (image == EXTRA_IMAGE_DOT)
                    image = nm->iColumn;
                else if (image >= EXTRA_IMAGE_SOUND && image <= EXTRA_IMAGE_LOGGING)
                    image = EXTRA_IMAGE_DOT;

                // Get item type (contact, group, etc...)
                if (itemType == CLCIT_CONTACT)
                {
                    if (image == EXTRA_IMAGE_DISABLEALL)
                    {
                        for (int i = 0; i < 4; i++)
                            SetExtraImage(hList, hItem, i, EXTRA_IMAGE_DOT);
                    }
                    else if (image == EXTRA_IMAGE_ENABLEALL)
                    {
                        for (int i = 0; i < 4; i++)
                            SetExtraImage(hList, hItem, i, i);
                    }
                    else
                    {
                        SetExtraImage(hList, hItem, nm->iColumn, image);
                    }
                }
                else if (itemType == CLCIT_INFO || itemType == CLCIT_GROUP)
                {
                    if (itemType == CLCIT_GROUP)
                        hItem = (HANDLE)SendMessage(hList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem);

                    if (hItem)
                    {
                        if (image == EXTRA_IMAGE_DISABLEALL)
                        {
                            for (int i = 0; i < 4; i++)
                                SetAllChildrenIcons(hList, hItem, i, EXTRA_IMAGE_DOT);
                        }
                        else if (image == EXTRA_IMAGE_ENABLEALL)
                        {
                            for (int i = 0; i < 4; i++)
                                SetAllChildrenIcons(hList, hItem, i, i);
                        }
                        else
                        {
                            SetAllChildrenIcons(hList, hItem, nm->iColumn, image);
                        }
                    }
                }

                // Update the all/none icons
                SetGroupsIcons(hList, (HANDLE)SendMessage(hList, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, NULL);
                // Activate Apply button
                SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
                break;
            }
            }
            break;
        case 0:
            switch (((LPNMHDR)lParam)->code)
            {
            case PSN_APPLY:
            {
                HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
                do
                {
                    HANDLE hItem = (HANDLE)SendMessage(hList, CLM_FINDCONTACT, (WPARAM)hContact, 0);
                    if (hItem)
                    {
                        if (GetExtraImage(hList, hItem, EXTRA_IMAGE_SOUND) == EXTRA_IMAGE_SOUND)
                            DBDeleteContactSetting(hContact, MODULE, "EnableSounds");
                        else
                            DBWriteContactSettingByte(hContact, MODULE, "EnableSounds", 0);

                        if (GetExtraImage(hList, hItem, EXTRA_IMAGE_POPUP) == EXTRA_IMAGE_POPUP)
                            DBDeleteContactSetting(hContact, MODULE, "EnablePopups");
                        else
                            DBWriteContactSettingByte(hContact, MODULE, "EnablePopups", 0);

                        if(GetExtraImage(hList, hItem, EXTRA_IMAGE_XSTATUS) == EXTRA_IMAGE_XSTATUS)
                            DBDeleteContactSetting(hContact, MODULE, "EnableXStatusNotify");
                        else
                            DBWriteContactSettingByte(hContact, MODULE, "EnableXStatusNotify", 0);

                        if (GetExtraImage(hList, hItem, EXTRA_IMAGE_LOGGING) == EXTRA_IMAGE_LOGGING)
                            DBDeleteContactSetting(hContact, MODULE, "EnableLogging");
                        else
                            DBWriteContactSettingByte(hContact, MODULE, "EnableLogging", 0);

                    }
                } while(hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0));

                return TRUE;
            }
            }
            break;
        }
        break;
    }
    case WM_DESTROY:
    {
        HIMAGELIST hImageList = (HIMAGELIST)SendMessage(GetDlgItem(hwndDlg, IDC_INDSNDLIST), CLM_GETEXTRAIMAGELIST, 0, 0);
        for (int i = 0; i < ImageList_GetImageCount(hImageList); i++)
            DestroyIcon(ImageList_GetIcon(hImageList, i, ILD_NORMAL));
        ImageList_Destroy(hImageList);
        break;
    }
    }
    return FALSE;
}
Beispiel #10
0
Datei: tab.c Projekt: dvdhoo/wine
static void test_removeimage(void)
{
    static const BYTE bits[32];
    HWND hwTab;
    INT i;
    TCITEM item;
    HICON hicon;
    HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR, 3, 4);

    hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits);
    ImageList_AddIcon(himl, hicon);
    ImageList_AddIcon(himl, hicon);
    ImageList_AddIcon(himl, hicon);

    hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
    SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);

    memset(&item, 0, sizeof(TCITEM));
    item.mask = TCIF_IMAGE;

    for(i = 0; i < 3; i++) {
        SendMessage(hwTab, TCM_GETITEM, i, (LPARAM)&item);
        expect(i, item.iImage);
    }

    /* remove image middle image */
    SendMessage(hwTab, TCM_REMOVEIMAGE, 1, 0);
    expect(2, ImageList_GetImageCount(himl));
    item.iImage = -1;
    SendMessage(hwTab, TCM_GETITEM, 0, (LPARAM)&item);
    expect(0, item.iImage);
    item.iImage = 0;
    SendMessage(hwTab, TCM_GETITEM, 1, (LPARAM)&item);
    expect(-1, item.iImage);
    item.iImage = 0;
    SendMessage(hwTab, TCM_GETITEM, 2, (LPARAM)&item);
    expect(1, item.iImage);
    /* remove first image */
    SendMessage(hwTab, TCM_REMOVEIMAGE, 0, 0);
    expect(1, ImageList_GetImageCount(himl));
    item.iImage = 0;
    SendMessage(hwTab, TCM_GETITEM, 0, (LPARAM)&item);
    expect(-1, item.iImage);
    item.iImage = 0;
    SendMessage(hwTab, TCM_GETITEM, 1, (LPARAM)&item);
    expect(-1, item.iImage);
    item.iImage = -1;
    SendMessage(hwTab, TCM_GETITEM, 2, (LPARAM)&item);
    expect(0, item.iImage);
    /* remove the last one */
    SendMessage(hwTab, TCM_REMOVEIMAGE, 0, 0);
    expect(0, ImageList_GetImageCount(himl));
    for(i = 0; i < 3; i++) {
        item.iImage = 0;
        SendMessage(hwTab, TCM_GETITEM, i, (LPARAM)&item);
        expect(-1, item.iImage);
    }

    DestroyWindow(hwTab);
    ImageList_Destroy(himl);
    DestroyIcon(hicon);
}
Beispiel #11
0
static int winTabsGetImageIndex(Ihandle* ih, const char* name)
{
  HIMAGELIST image_list;
  int count, i, bpp, ret;
  Iarray* bmp_array;
  HBITMAP *bmp_array_data, hMask=NULL;
  HBITMAP bmp = iupImageGetImage(name, ih, 0);
  if (!bmp)
    return -1;

  /* the array is used to avoi adding the same bitmap twice */
  bmp_array = (Iarray*)iupAttribGet(ih, "_IUPWIN_BMPARRAY");
  if (!bmp_array)
  {
    /* create the array if does not exist */
    bmp_array = iupArrayCreate(50, sizeof(HBITMAP));
    iupAttribSetStr(ih, "_IUPWIN_BMPARRAY", (char*)bmp_array);
  }

  bmp_array_data = iupArrayGetData(bmp_array);

  image_list = (HIMAGELIST)SendMessage(ih->handle, TCM_GETIMAGELIST, 0, 0);
  if (!image_list)
  {
    int width, height;
    UINT flags = ILC_COLOR32|ILC_MASK;

    /* must use this info, since image can be a driver image loaded from resources */
    iupdrvImageGetInfo(bmp, &width, &height, &bpp);

    /* create the image list if does not exist */
    image_list = ImageList_Create(width, height, flags, 0, 50);
    SendMessage(ih->handle, TCM_SETIMAGELIST, 0, (LPARAM)image_list);
  }
  else
    iupdrvImageGetInfo(bmp, NULL, NULL, &bpp);

  /* check if that bitmap is already added to the list,
     but we can not compare with the actual bitmap at the list since it is a copy */
  count = ImageList_GetImageCount(image_list);
  for (i=0; i<count; i++)
  {
    if (bmp_array_data[i] == bmp)
      return i;
  }

  if (bpp == 8)
  {
    Ihandle* image = IupGetHandle(name);
    if (image)
    {
      iupAttribSetStr(image, "_IUPIMG_NO_INVERT", "1");
      hMask = iupdrvImageCreateMask(image);
      iupAttribSetStr(image, "_IUPIMG_NO_INVERT", NULL);
    }
  }

  bmp_array_data = iupArrayInc(bmp_array);
  bmp_array_data[i] = bmp;
  ret = ImageList_Add(image_list, bmp, hMask);  /* the bmp is duplicated at the list */
  DeleteObject(hMask);
  return ret;
}
Beispiel #12
0
RT_B RT_API RtCreateGuiCommandMenuItemManager(RT_GUI_COMMAND_MENU_ITEM_MANAGER* lpGuiCommandMenuItemManager, RT_GUI_COMMAND_MENU_ITEM* lpCommandMenuItems, RT_UN unCommandMenuItemsCount, RT_H hInstance)
{
  RT_H hDc;
  RT_N nIconsCount;
  RT_N nImageIndex;
  RT_H hTemporaryToolBar;
  RT_N nSystemImageList;
  RT_N lpSystemImageListIndex[3];
  RT_UN32 unOsVersion;
  RT_UN32 lpMaskBuffer[256];
  RT_UN32 lpColorBuffer[256];
  RT_N nI;
  RT_B bResult;

  /* Used to load system images. */
  hTemporaryToolBar = RT_NULL;

  hDc = RT_NULL;

  unOsVersion = RtGetOsVersion(RT_NULL);

  lpGuiCommandMenuItemManager->lpCommandMenuItems = lpCommandMenuItems;
  lpGuiCommandMenuItemManager->nCommandMenuItemsCount = unCommandMenuItemsCount;

  /* Count icons. The result is not accurate as the user can use system image lists, but it will help for initial image list size. */
  nIconsCount = 0;
  for (nI = 0; nI < unCommandMenuItemsCount; nI++)
  {
    if (lpCommandMenuItems[nI].hIcon)
    {
      nIconsCount++;
    }
    lpCommandMenuItems[nI].hBitmap = RT_NULL;
  }

  lpGuiCommandMenuItemManager->hToolBarImageList = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, nIconsCount, 8);
  if (!lpGuiCommandMenuItemManager->hToolBarImageList) goto handle_error;

  /* By default, there is no system image list loaded. */
  for (nI = 0; nI < 3; nI++)
  {
    lpSystemImageListIndex[nI] = -1;
  }

  /* Loop on command menu items. */
  nImageIndex = 0;
  for (nI = 0; nI < unCommandMenuItemsCount; nI++)
  {
    if (lpCommandMenuItems[nI].hIcon)
    {
      /* The user has provided an icon. */
      if (ImageList_AddIcon(lpGuiCommandMenuItemManager->hToolBarImageList, lpCommandMenuItems[nI].hIcon) == -1)
      {
        goto handle_error;
      }
      lpCommandMenuItems[nI].unImageIndex = nImageIndex;
      nImageIndex++;
    }
    else if (lpCommandMenuItems[nI].nSystemImageList != -1)
    {
      /* The user want to use an icon from a system image list. */
      switch (lpCommandMenuItems[nI].nSystemImageList)
      {
        case IDB_STD_SMALL_COLOR:
          nSystemImageList = 0;
          break;
        case IDB_VIEW_SMALL_COLOR:
          nSystemImageList = 1;
          break;
        case IDB_HIST_SMALL_COLOR:
          nSystemImageList = 2;
          break;
        default:
          nSystemImageList = -1;
      }
      if (nSystemImageList == -1)
      {
        RtSetLastError(RT_ERROR_BAD_ARGUMENTS);
        goto handle_error;
      }
      /* If the system list is not already loaded in the  image list. */
      if (lpSystemImageListIndex[nSystemImageList] == -1)
      {
        /* We need a temporary toolbar to load system images in the image list. */
        if (!hTemporaryToolBar)
        {
          hTemporaryToolBar = CreateWindowEx(0,       /* Extended style. */
                          TOOLBARCLASSNAME,           /* Class name. */
                          _R("TemporaryToolBar"),     /* Window name. */
                          0,                          /* Style. */
                          0, 0, 0, 0,
                          RT_NULL,                     /* Parent. */
                          RT_NULL,                     /* Control id. */
                          hInstance,
                          RT_NULL);
          if (!hTemporaryToolBar)
          {
            goto handle_error;
          }
          /* We use our main image list as temporary image list. */
          SendMessage(hTemporaryToolBar, TB_SETIMAGELIST, 0, (LPARAM)lpGuiCommandMenuItemManager->hToolBarImageList);
        }
        SendMessage(hTemporaryToolBar, TB_LOADIMAGES, (WPARAM)lpCommandMenuItems[nI].nSystemImageList, (LPARAM)HINST_COMMCTRL);
        lpSystemImageListIndex[nSystemImageList] = nImageIndex;
        nImageIndex = ImageList_GetImageCount(lpGuiCommandMenuItemManager->hToolBarImageList);
      }
      lpCommandMenuItems[nI].unImageIndex = lpSystemImageListIndex[nSystemImageList] + lpCommandMenuItems[nI].nSystemImageIndex;

      /* Create the menu icon from the image list. */
      lpCommandMenuItems[nI].hIcon = ImageList_ExtractIcon(0, lpGuiCommandMenuItemManager->hToolBarImageList, lpCommandMenuItems[nI].unImageIndex);
      if (!lpCommandMenuItems[nI].hIcon)
      {
        goto handle_error;
      }
    }
    else
    {
      lpCommandMenuItems[nI].unImageIndex = -1;
    }

    /* Under vista, we must use a PARGB bitmap for menus. */
    if (unOsVersion >= 6)
    {
      if (lpCommandMenuItems[nI].hIcon)
      {
        /* Get a reference DC. */
        if (!hDc)
        {
          hDc = GetDC(RT_NULL);
          if (!hDc) goto handle_error;
        }
        /* Create a PARG bitmap from the icon. */
        lpCommandMenuItems[nI].hBitmap = RtConvertIconToPargbBitmap(lpCommandMenuItems[nI].hIcon, 16, 16, lpMaskBuffer, lpColorBuffer, hDc);
        if (!lpCommandMenuItems[nI].hBitmap) goto handle_error;
      }
    }
  }

  bResult = RT_TRUE;
  goto free_resources;
handle_error:
  /* Free allocated content in case of error. */
  if (lpGuiCommandMenuItemManager->hToolBarImageList)
  {
    ImageList_Destroy(lpGuiCommandMenuItemManager->hToolBarImageList);
  }
  /* Free allocated icons and bitmaps. */
  for (nI = 0; nI < unCommandMenuItemsCount; nI++)
  {
    if (lpCommandMenuItems[nI].nSystemImageIndex != -1)
    {
      if (lpCommandMenuItems[nI].hIcon)
      {
        DestroyIcon(lpCommandMenuItems[nI].hIcon);
      }
    }
    if (lpCommandMenuItems[nI].hBitmap)
    {
      DeleteObject(lpCommandMenuItems[nI].hBitmap);
    }
  }
  bResult = RT_FALSE;
free_resources:
  if (hDc)
  {
    if (!ReleaseDC(RT_NULL, hDc) && bResult)
    {
      hDc = RT_NULL;
      goto handle_error;
    }
    hDc = RT_NULL;
  }
  if (hTemporaryToolBar)
  {
    if (!DestroyWindow(hTemporaryToolBar) && bResult)
    {
      hTemporaryToolBar = RT_NULL;
      goto handle_error;
    }
    hTemporaryToolBar = RT_NULL;
  }

  return bResult;
}