From: Zebediah Figura Subject: [PATCH 3/5] aclui: Add icons to the users list. Message-Id: <20210227225315.780653-3-z.figura12@gmail.com> Date: Sat, 27 Feb 2021 16:53:13 -0600 In-Reply-To: <20210227225315.780653-1-z.figura12@gmail.com> References: <20210227225315.780653-1-z.figura12@gmail.com> From: Michael Müller Signed-off-by: Zebediah Figura --- dlls/aclui/Makefile.in | 2 +- dlls/aclui/aclui.rc | 5 +++++ dlls/aclui/aclui_main.c | 34 +++++++++++++++++++++++++++++++++- dlls/aclui/user_icons.bmp | Bin 0 -> 2730 bytes 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 dlls/aclui/user_icons.bmp diff --git a/dlls/aclui/Makefile.in b/dlls/aclui/Makefile.in index f93e5da6c8d..1eac32f0700 100644 --- a/dlls/aclui/Makefile.in +++ b/dlls/aclui/Makefile.in @@ -1,6 +1,6 @@ MODULE = aclui.dll IMPORTLIB = aclui -IMPORTS = comctl32 user32 advapi32 +IMPORTS = comctl32 user32 advapi32 gdi32 EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native diff --git a/dlls/aclui/aclui.rc b/dlls/aclui/aclui.rc index 3a03b0550e9..6e6b3c268b5 100644 --- a/dlls/aclui/aclui.rc +++ b/dlls/aclui/aclui.rc @@ -36,3 +36,8 @@ BEGIN LTEXT "Deny", -1, 180, 105, 55, 10, SS_CENTER CONTROL "", IDC_ACE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | LVS_SINGLESEL | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 5, 115, 230, 95, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE END + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +/* @makedep: user_icons.bmp */ +IDB_USER_ICONS BITMAP user_icons.bmp diff --git a/dlls/aclui/aclui_main.c b/dlls/aclui/aclui_main.c index b9aea8828a9..9c581610bfe 100644 --- a/dlls/aclui/aclui_main.c +++ b/dlls/aclui/aclui_main.c @@ -55,6 +55,7 @@ struct security_page unsigned int user_count; HWND dialog; + HIMAGELIST image_list; }; static HINSTANCE aclui_instance; @@ -110,11 +111,12 @@ static void add_user(struct security_page *page, PSID sid) user->name = name; user->sid = sid; - item.mask = LVIF_PARAM | LVIF_TEXT; + item.mask = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE; item.iItem = -1; item.iSubItem = 0; item.pszText = name; item.lParam = (LPARAM)user; + item.iImage = (sid_type == SidTypeGroup || sid_type == SidTypeWellKnownGroup) ? 0 : 1; SendMessageW(GetDlgItem(page->dialog, IDC_USERS), LVM_INSERTITEMW, 0, (LPARAM)&item); } @@ -160,6 +162,30 @@ static void init_users(struct security_page *page) } } +static HIMAGELIST create_image_list(UINT resource, UINT width, UINT height, UINT count, COLORREF mask_color) +{ + HIMAGELIST image_list; + HBITMAP image; + INT ret; + + if (!(image_list = ImageList_Create(width, height, ILC_COLOR32 | ILC_MASK, 0, count))) + return NULL; + if (!(image = LoadBitmapW(aclui_instance, MAKEINTRESOURCEW(resource)))) + { + ImageList_Destroy(image_list); + return NULL; + } + + ret = ImageList_AddMasked(image_list, image, mask_color); + DeleteObject(image); + if (ret == -1) + { + ImageList_Destroy(image_list); + return NULL; + } + return image_list; +} + static void security_page_free(struct security_page *page) { unsigned int i; @@ -169,6 +195,8 @@ static void security_page_free(struct security_page *page) free(page->users); LocalFree(page->sd); + if (page->image_list) + ImageList_Destroy(page->image_list); if (page->security) ISecurityInformation_Release(page->security); free(page); @@ -199,6 +227,10 @@ static void security_page_init_dlg(HWND hwnd, struct security_page *page) column.cx = rect.right - rect.left; SendMessageW(control, LVM_INSERTCOLUMNW, 0, (LPARAM)&column); + if (!(page->image_list = create_image_list(IDB_USER_ICONS, 18, 18, 2, RGB(255, 0, 255)))) + return; + SendMessageW(control, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)page->image_list); + init_users(page); if (page->user_count) diff --git a/dlls/aclui/user_icons.bmp b/dlls/aclui/user_icons.bmp new file mode 100644 index 0000000000000000000000000000000000000000..29259e2724ccf67b7e3e84c3fc6d749bc9e8ae26 GIT binary patch literal 2730 zcmdUtc~F#P0LH1N8IS3YY|3(`$+FC$Q3M3!8WF=I!cj3Jj^t)pSCB(Uu2clUR2&33 zmt$E#SWXd>M2$=FNK;cX1Ox;D6*{J|rkY>xw}vCAo72=EeY4NL`+nd1{Py{t_qBB> zousF|c8KpNp*Mx52tB1YUGEt&P8ZJ&pS>qB9lg-gyZ_O%U9u`<^ud#kPmfy&di<}{ zakhb0O*)MQyY8!{B!$ke8g;%$TT?AHpKYKjQ9KWlM+A%)TIkK`T6*g}5L`zZYvknL+p)?dmLW4gBmX{G?_dsa{rOyBm_@A>?UD@ut;exz8p2V*`?1=8)iGhP3WM|43gK1tH7D z8bj?`$*&atY)>N!!&Z{9b}ngd2BZl8)|L9C$rjUnv2_eX;$7(MM3$P2bJ7mhChsOT z=mS(TbJRY@6#LC%zs!Utv2O)po-5eN&a=t#v*MUCZVaonEFE>gyQI1rpz=1>`qjSk z(1bfsn;cG_mytG~lq=p*pDej8P3ojEj2pLaVHO&|OY6Ov?B~V=9~T_mY|#WQL?bt) zYP}h?p*9TO?4xFrJ%xfVWy(|7^3BomF{~!lPD(-+YqOMycaZ#LLdVm>Idf1&k$5*L zr_`C0DQBH6m+H&LFk;ksOk3y41SyOES|-TdnIdy0dA*&;V$RV|9jHu{Q+uqL^3Q@f z6yt!}-<-;AK4Umi&wW?VQyR9MQhyUF6lNRIUT3!80_s7`OHM$Cggh?k>h28 zI&>v>bAK4a3Cqpm!|HWx_>As^dUy|$rfgQ z5_m7iMmdusH!x|VKa;{0%naI$S!Nq^vaX|_ah;iIU6?7`*?r{lL!8k(BmLcIBGynF zX2<4D3M^wQuuMKJbOwvKgKUWoK@+-+k_hL=GS=*jBB1c!%VnsgGA+-_zGkK{AX>BfBTSv(`R z^T+hxAIrGw{wwxzo0;kq%5=X}UXy3?x;z7;T_^B8G{~M)BgD7d;ls+Cyd^qvEbe$L zYqY1unO|d`-=lp88+9+HBA4WyExKNmed%xg5y~3gP-HVBxR4n^g-rEHV^-X86m>)F zJu^bWiD8^Xp4pk#kyUl+