![]() |
|
Icons disapear from a CommanBar
Hi all,
I have a problem with an Outllok AddIn. Our AddIn creates a CommandBar and adds some buttons to it. Depending on the context of the user actions (ie which message type is highlighted, is a contact highlighted..) some buttons are enabled or disabled. This runs flawlessly on most of our customers enviroments. We now have one customer where the following problems occur: On some or most buttons the icons are missing. The button is there and can be used, but there is no icon. We have a 'restore Toolbar' option in our settings dialog wich, under the hood, removes all buttons from the CommandBar and then adds them again. Interstingly, after each hit on the restore-button, a different set of Icons is displayed on the CommandBar until finally, after a non deterministic count of tries, all icons are displayed. This ist not quite the way we would like this to function. The enviroment is Windows Server 2003, Terminal Server Mode, Citrix Metaframe and Outlook 2000 SR3 Any hints are strongly appreciated... --Thomas |
Icons disapear from a CommanBar
Are they using Outlook 2000? You cannot load custom icons in add-ins for
that version, such as those loaded from a file or a resource file. You need to use the CopyFace and PasteFace methods with built-in icons only. -- Eric Legault [MVP - Outlook] MCDBA, MCTS (Messaging & Collaboration, SharePoint Infrastructure, MOSS 2007 & WSS 3.0 Application Development) Collaborative Innovations - Try Picture Attachments Wizard For Microsoft Outlook - Web: http://www.collaborativeinnovations.ca Blog: http://blogs.officezealot.com/legault "Minor, Thomas" wrote in message ... Hi all, I have a problem with an Outllok AddIn. Our AddIn creates a CommandBar and adds some buttons to it. Depending on the context of the user actions (ie which message type is highlighted, is a contact highlighted..) some buttons are enabled or disabled. This runs flawlessly on most of our customers enviroments. We now have one customer where the following problems occur: On some or most buttons the icons are missing. The button is there and can be used, but there is no icon. We have a 'restore Toolbar' option in our settings dialog wich, under the hood, removes all buttons from the CommandBar and then adds them again. Interstingly, after each hit on the restore-button, a different set of Icons is displayed on the CommandBar until finally, after a non deterministic count of tries, all icons are displayed. This ist not quite the way we would like this to function. The enviroment is Windows Server 2003, Terminal Server Mode, Citrix Metaframe and Outlook 2000 SR3 Any hints are strongly appreciated... --Thomas |
Icons disapear from a CommanBar
You can use any custom icon as long as it's a BMP with 16x16x256 colors in
Outlook 2000 buttons but you must use PasteFace after copying the image to the clipboard. I regularly use BMPs stored in a resource file or in the file system for Outlook 2000 button images. -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm wrote in message ... Are they using Outlook 2000? You cannot load custom icons in add-ins for that version, such as those loaded from a file or a resource file. You need to use the CopyFace and PasteFace methods with built-in icons only. -- Eric Legault [MVP - Outlook] MCDBA, MCTS (Messaging & Collaboration, SharePoint Infrastructure, MOSS 2007 & WSS 3.0 Application Development) Collaborative Innovations - Try Picture Attachments Wizard For Microsoft Outlook - Web: http://www.collaborativeinnovations.ca Blog: http://blogs.officezealot.com/legault |
Icons disapear from a CommanBar
Impossible to tell from that. How are you creating the buttons, show some
sample code. What sort of Explorer or Inspector is this on? Is WordMail involved? What mode of operation is the user running for Outlook 2000, Internet only mode or Corporate/workgroup mode? -- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Professional Programming Outlook 2007. Reminder Manager, Extended Reminders, Attachment Options. http://www.slovaktech.com/products.htm "Minor, Thomas" wrote in message ... Hi all, I have a problem with an Outllok AddIn. Our AddIn creates a CommandBar and adds some buttons to it. Depending on the context of the user actions (ie which message type is highlighted, is a contact highlighted..) some buttons are enabled or disabled. This runs flawlessly on most of our customers enviroments. We now have one customer where the following problems occur: On some or most buttons the icons are missing. The button is there and can be used, but there is no icon. We have a 'restore Toolbar' option in our settings dialog wich, under the hood, removes all buttons from the CommandBar and then adds them again. Interstingly, after each hit on the restore-button, a different set of Icons is displayed on the CommandBar until finally, after a non deterministic count of tries, all icons are displayed. This ist not quite the way we would like this to function. The enviroment is Windows Server 2003, Terminal Server Mode, Citrix Metaframe and Outlook 2000 SR3 Any hints are strongly appreciated... --Thomas |
Icons disapear from a CommanBar
Hi Eric.
Are they using Outlook 2000? You cannot load custom icons in add-ins for that version, such as those loaded from a file or a resource file. You need to use the CopyFace and PasteFace methods with built-in icons only. That's right. I did not go into the detail here. Outlook 2K connects to an Excahnge server. We use the following code to put the icons on the toolbar: void CAddin::InsertButtonFace( _CommandBarButton *pCommandBarButton, UINT lIcon) { if (0 != lIcon) { if (OUTLOOK_XP = m_wOutlookVersion) { InsertButtonFacePicture(pCommandBarButton, lIcon); } else { // version less than OUTLOOK_XP - Outlook 2000 InsertButtonFaceClipboard(pCommandBarButton, lIcon); } } } Our Addin runs in different Outlook versions and m_wOutlookVersion keeps the actual Outlook version after initialization. Since we obviously act differnet on Outlook 2000 there might be a problem in my function. void CAddin::InsertButtonFaceClipboard( _CommandBarButton *pCommandBarButton, UINT lIcon) { CopyIcon2Clipboard(lIcon); try { pCommandBarButton-PasteFace(); } catch (COleDispatchException *e) { if (e-m_scError == CdoE_CALL_FAILED) { e-Delete(); } else { e-m_strDescription)); throw e; } } // cleanup OpenClipboard(NULL); EmptyClipboard(); CloseClipboard(); } Finally the copy2clipboard function. #define ICON_SIZE_X 16 #define ICON_SIZE_Y 16 void CAddin::CopyIcon2Clipboard(UINT lIcon) { HICON hIcon; ICONINFO iconInfo; HDC hdc, hdcMem, hdcMemSrc; HBITMAP hBitmap; STGMEDIUM stgMedium; COleDataSource *pClipboard; hIcon = theApp.CRL_GetIcon(lIcon, CRL_ENABLED | CRL_SIZE_SMALL); if (NULL == hIcon) { return; } VERIFY(GetIconInfo(hIcon, &iconInfo)); ASSERT(iconInfo.fIcon); ASSERT(iconInfo.hbmColor); // create transparency hdc = ::GetDC(NULL); ASSERT(hdc); hBitmap = CreateCompatibleBitmap(hdc, ICON_SIZE_X, ICON_SIZE_Y); VERIFY(DeleteDC(hdc)); hdc = NULL; hdcMem = CreateCompatibleDC(NULL); SelectObject(hdcMem, hBitmap); // color with menu bg color SelectObject(hdcMem, GetSysColorBrush(iColorMenu)); VERIFY(Rectangle(hdcMem, -1, -1, ICON_SIZE_X + 1, ICON_SIZE_Y + 1)); // aply mask hdcMemSrc = CreateCompatibleDC(NULL); ASSERT(hdcMemSrc); SelectObject(hdcMemSrc, iconInfo.hbmMask); VERIFY(BitBlt(hdcMem, 0, 0, ICON_SIZE_X, ICON_SIZE_Y, hdcMemSrc, 0, 0, SRCAND)); SelectObject(hdcMemSrc, iconInfo.hbmColor); VERIFY(BitBlt(hdcMem, 0, 0, ICON_SIZE_X, ICON_SIZE_Y, hdcMemSrc, 0, 0, SRCINVERT)); // cleanup VERIFY(DeleteDC(hdcMemSrc)); hdcMemSrc = NULL; VERIFY(DeleteDC(hdcMem)); hdcMem = NULL; stgMedium.pUnkForRelease = NULL; stgMedium.hBitmap = hBitmap; stgMedium.tymed = TYMED_GDI; try { pClipboard = new COleDataSource(); ASSERT_VALID(pClipboard); if (NULL == pClipboard) { DDERR(("kann kein Clipboard kriegen")); } else { pClipboard-CacheData(CF_BITMAP, &stgMedium); pClipboard-SetClipboard(); } } catch (COleException *e) { CString str; e-GetErrorMessage(str.GetBuffer(1024), 1024, NULL); str.ReleaseBuffer(); e-Delete(); } DestroyIcon(hIcon); } |
Icons disapear from a CommanBar
Good morning, Thomas. Welcome to office.developer.com.add_ins newsgroup! My
name is Jialiang Ge [MSFT]. I once handled a very similar issue, where a customer said his CommandBarButton icon cannot be shown only in Outlook 2000. That problem turned out to be caused by the code: HBITMAP hSrcBmp = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); The method LoadBitmap has been superseded by the LoadImage function because it is incompatible with some device context. Thus, the resolution was to replace the line with: HBITMAP hSrcBmp = (HBITMAP)::LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); Thomas, because you did not mention how you loaded the bitmap icon or provided any code snippet for test, I cannot quickly figure out the reason for this specific issue. But I suggest you read the above-mentioned thread: http://office-outlook.com/outlook-fo...60/#msg_209360 And if the thread does not help, would you please show us some code snippets? I'd be very happy to test it for you. Regards, Jialiang Ge , remove 'online.') Microsoft Online Community Support Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: . ================================================== Get notification to my posts through email? Please refer to http://msdn.microsoft.com/subscripti...#notifications. Note: The MSDN Managed Newsgroup support offering is for non-urgent issues where an initial response from the community or a Microsoft Support Engineer within 1 business day is acceptable. Please note that each follow up response may take approximately 2 business days as the support professional working with you may need further investigation to reach the most efficient resolution. The offering is not appropriate for situations that require urgent, real-time or phone-based interactions or complex project analysis and dump analysis issues. Issues of this nature are best handled working with a dedicated Microsoft Support Engineer by contacting Microsoft Customer Support Services (CSS) at http://msdn.microsoft.com/subscripti...t/default.aspx. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights. "Minor, Thomas" wrote in message ... Hi all, I have a problem with an Outllok AddIn. Our AddIn creates a CommandBar and adds some buttons to it. Depending on the context of the user actions (ie which message type is highlighted, is a contact highlighted..) some buttons are enabled or disabled. This runs flawlessly on most of our customers enviroments. We now have one customer where the following problems occur: On some or most buttons the icons are missing. The button is there and can be used, but there is no icon. We have a 'restore Toolbar' option in our settings dialog wich, under the hood, removes all buttons from the CommandBar and then adds them again. Interstingly, after each hit on the restore-button, a different set of Icons is displayed on the CommandBar until finally, after a non deterministic count of tries, all icons are displayed. This ist not quite the way we would like this to function. The enviroment is Windows Server 2003, Terminal Server Mode, Citrix Metaframe and Outlook 2000 SR3 Any hints are strongly appreciated... --Thomas |
Icons disapear from a CommanBar
Hello Thomas
I notice your response to Eric with some code snippets after I posted my initial reply. :-) I¡¯m starting to build an Outlook 2000 environment to test it. Based on my experience, Thomas, I feel the problem may lie in your code line: hIcon = theApp.CRL_GetIcon(lIcon, CRL_ENABLED | CRL_SIZE_SMALL); What¡¯s your implementation of CRL_GetIcon? Below is a workable example of Copy2clipboard for Outlook 2000. I wrote & tested it when I was dealing with the thread mentioned in my last reply. I¡¯ve also attached its project to this reply, and you may download it with Outlook Express or Windows Mail. void CCOMAddinUtil::CopyTransBitmap() { ////////////////////////////////////////////// /////////////Part 1. Load the button image and get a HBITMAP object. ////////////////////////////////////////////// //HBITMAP hSrcBmp = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); HBITMAP hSrcBmp = (HBITMAP)::LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); //// Get a device context HDC hDC = GetDC(0); ////////////////////////////////////////////// /////////////Part 2(2). Load the Mask image and get a HBITMAP object for the mask. (CORRECT) ////////////////////////////////////////////// ////Create the Bitmap MASK BITMAP bitmap; HBITMAP hbmMask; // Get the BITMAP GetObject(hSrcBmp, sizeof(BITMAP), &bitmap); // Create memory DCs to work with. HDC hdcMask = CreateCompatibleDC(hDC); HDC hdcImage = CreateCompatibleDC(hDC); // Create a monochrome bitmap for the mask. hbmMask = CreateBitmap(bitmap.bmWidth, bitmap.bmHeight, 1, 1, NULL); // Select the mono bitmap into its DC. HBITMAP hbmOldMask = (HBITMAP)SelectObject(hdcMask, hbmMask); // Select the image bitmap into its DC. HBITMAP hbmOldImage = (HBITMAP)SelectObject(hdcImage, hSrcBmp); // Set the transparency color to be the top-left pixel. SetBkColor(hdcImage, GetPixel(hdcImage, 0, 0)); SetTextColor(hdcImage, RGB(255,255,255)); // Make the mask. BitBlt(hdcMask, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcImage, 0, 0, SRCCOPY); // Cleaup up SelectObject(hdcMask, hbmOldMask); SelectObject(hdcImage, hbmOldImage); DeleteDC(hdcMask); DeleteDC(hdcImage); ////////////////////////////////////////////// /////////////Part 3. Set the "Toolbar Button Face" ////////////////////////////////////////////// BITMAPINFO bmi = {0}; bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); GetDIBits(hDC, hSrcBmp, 0, 0, 0, &bmi, DIB_RGB_COLORS); int nColors = (bmi.bmiHeader.biBitCount 8) ? 0 : (1 bmi.bmiHeader.biBitCount); DWORD headerLen = sizeof(bmi.bmiHeader) + nColors*sizeof(RGBQUAD); HGLOBAL hBits = GlobalAlloc(GMEM_SHARE|GMEM_MOVEABLE, headerLen + bmi.bmiHeader.biSizeImage); if(hBits) { LPVOID pBits = GlobalLock(hBits); CopyMemory(pBits, &bmi.bmiHeader, sizeof(bmi.bmiHeader)); GetDIBits(hDC, hSrcBmp, 0, bmi.bmiHeader.biHeight, ((LPBYTE)pBits+headerLen), (LPBITMAPINFO)pBits, DIB_RGB_COLORS); // S_OFF2000_CLIP_IMAGE was filled earlier with the localized name of the clipboard format "Toolbar Button Face" UINT clipImage = RegisterClipboardFormat(_T("Toolbar Button Face")); // I copy the DIB to put CF_DIB as well as the Toolbar format into the clipboard // I tried adding only the Toolbar format or both - neither way the disabled button image was displayed SIZE_T cbDIB = GlobalSize(hBits); HANDLE hgDIB = GlobalAlloc(GMEM_SHARE|GMEM_MOVEABLE, cbDIB); LPVOID pDIB = GlobalLock(hgDIB); CopyMemory(pDIB, pBits, cbDIB); GlobalUnlock(hgDIB); GlobalUnlock(hBits); BOOL f = OpenClipboard(NULL); if (!EmptyClipboard()) AfxMessageBox(_T("error emty clipboard")); // CF_DIB might be optional so I tried with and without this clipboard data if(SetClipboardData(CF_DIB, hgDIB) == NULL) GlobalFree(hgDIB); if(SetClipboardData(clipImage, hBits) == NULL) { GlobalFree(hBits); } else { ////////////////////////////////////////////// /////////////Part 4. Set the "Toolbar Button Mask" ////////////////////////////////////////////// ZeroMemory(&bmi, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); GetDIBits(hDC, hbmMask, 0, 0, 0, &bmi, DIB_RGB_COLORS); nColors = (bmi.bmiHeader.biBitCount 8) ? 0 : (1 bmi.bmiHeader.biBitCount); headerLen = sizeof(bmi.bmiHeader) + nColors*sizeof(RGBQUAD); hBits = GlobalAlloc(GMEM_SHARE|GMEM_MOVEABLE, headerLen+bmi.bmiHeader.biSizeImage); if(hBits) { //AfxMessageBox(_T("Allocate")); LPVOID pBits = GlobalLock(hBits); CopyMemory(pBits, &bmi.bmiHeader, sizeof(bmi.bmiHeader)); GetDIBits(hDC, hbmMask, 0, bmi.bmiHeader.biHeight, ((LPBYTE)pBits+headerLen), (LPBITMAPINFO)pBits, DIB_RGB_COLORS); // S_OFF2000_CLIP_MASK contains the localized name of the "Toolbar Button Mask" UINT clipMask = RegisterClipboardFormat(_T("Toolbar Button Mask")); GlobalUnlock(hBits); if(clipMask == 0 || SetClipboardData(clipMask, hBits) == NULL) { //AfxMessageBox(_T("Fail")); GlobalFree(hBits); } } } } // Close the clipboard CloseClipboard(); } Regards, Jialiang Ge , remove 'online.') Microsoft Online Community Support ================================================= Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: . This posting is provided "AS IS" with no warranties, and confers no rights. ================================================= "Jialiang Ge [MSFT]" wrote in message ... Good morning, Thomas. Welcome to office.developer.com.add_ins newsgroup! My name is Jialiang Ge [MSFT]. I once handled a very similar issue, where a customer said his CommandBarButton icon cannot be shown only in Outlook 2000. That problem turned out to be caused by the code: HBITMAP hSrcBmp = LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); The method LoadBitmap has been superseded by the LoadImage function because it is incompatible with some device context. Thus, the resolution was to replace the line with: HBITMAP hSrcBmp = (HBITMAP)::LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); Thomas, because you did not mention how you loaded the bitmap icon or provided any code snippet for test, I cannot quickly figure out the reason for this specific issue. But I suggest you read the above-mentioned thread: http://office-outlook.com/outlook-fo...60/#msg_209360 And if the thread does not help, would you please show us some code snippets? I'd be very happy to test it for you. Regards, Jialiang Ge , remove 'online.') Microsoft Online Community Support Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: . ================================================== Get notification to my posts through email? Please refer to http://msdn.microsoft.com/subscripti...#notifications. Note: The MSDN Managed Newsgroup support offering is for non-urgent issues where an initial response from the community or a Microsoft Support Engineer within 1 business day is acceptable. Please note that each follow up response may take approximately 2 business days as the support professional working with you may need further investigation to reach the most efficient resolution. The offering is not appropriate for situations that require urgent, real-time or phone-based interactions or complex project analysis and dump analysis issues. Issues of this nature are best handled working with a dedicated Microsoft Support Engineer by contacting Microsoft Customer Support Services (CSS) at http://msdn.microsoft.com/subscripti...t/default.aspx. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights. "Minor, Thomas" wrote in message ... Hi all, I have a problem with an Outllok AddIn. Our AddIn creates a CommandBar and adds some buttons to it. Depending on the context of the user actions (ie which message type is highlighted, is a contact highlighted..) some buttons are enabled or disabled. This runs flawlessly on most of our customers enviroments. We now have one customer where the following problems occur: On some or most buttons the icons are missing. The button is there and can be used, but there is no icon. We have a 'restore Toolbar' option in our settings dialog wich, under the hood, removes all buttons from the CommandBar and then adds them again. Interstingly, after each hit on the restore-button, a different set of Icons is displayed on the CommandBar until finally, after a non deterministic count of tries, all icons are displayed. This ist not quite the way we would like this to function. The enviroment is Windows Server 2003, Terminal Server Mode, Citrix Metaframe and Outlook 2000 SR3 Any hints are strongly appreciated... --Thomas |
Icons disapear from a CommanBar
Heallo Jialiang,
thanks for your extensive posts on my issue. test it. Based on my experience, Thomas, I feel the problem may lie in your code line: hIcon = theApp.CRL_GetIcon(lIcon, CRL_ENABLED | CRL_SIZE_SMALL); What¡¯s your implementation of CRL_GetIcon? We use a resource dll for whitelabeling the application which implements the function like this: extern "C" HICON CALLBACK CRL_GetIcon(DWORD nID, DWORD dwFlags) { // Tell MFC to use our own resources not those of the loading module // (must be used for every exported function that loads resources). #ifdef _AFXDLL AFX_MANAGE_STATE(AfxGetStaticModuleState()) #endif // Size? INT cx = CrlGetSize_(dwFlags); // Enabled or disabled icon? LPCTSTR pszName = MAKEINTRESOURCE(dwFlags & CRL_DISABLED ? nID +1 : nID); // Note that LoadImage() does not require a subsequent DestroyIcon() in Win32. // Important: If the icon can't be found, return the icon 'empty' to avoid // program crashes when returning NULL as HICON. hIcon = (HICON)LoadImage( AfxGetResourceHandle(), pszName, IMAGE_ICON, cx, cx, LR_DEFAULTCOLOR); // LoadImage fails to load 128x128 icons on some Win9X systems, so use the 64x64 as fallback. if(!hIcon && (cx == 128)) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), pszName, IMAGE_ICON, 64, 64, LR_DEFAULTCOLOR); if(!hIcon) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_CRL_MISC_UNKNOWN_ID), IMAGE_ICON, cx, cx, LR_DEFAULTCOLOR); // LoadImage fails to load 128x128 icons on some Win9X systems, so use the 64x64 as fallback. if(!hIcon && (cx == 128)) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_CRL_MISC_UNKNOWN_ID), IMAGE_ICON, 64, 64, LR_DEFAULTCOLOR); return hIcon; } The main difference in our handling seems to be that we load the icon as an icon first and convert it to a bitmap afterwards. We chose this approach to use a generic way to load the icons. Maybe there is a fault in this conversion... --Thomas |
Icons disapear from a CommanBar
Hello Thomas
I'm writing to check whether the icon-bmp conversion method in my last reply help you or not. If you need my help to translate those VB code (http://support.microsoft.com/kb/260850) to VC, please let me know. Regards, Jialiang Ge , remove 'online.') Microsoft Online Community Support ================================================= Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: . This posting is provided "AS IS" with no warranties, and confers no rights. ================================================= "Jialiang Ge [MSFT]" wrote in message ... Hello Thomas, In fact, my code was written by referencing the VB code in the KB article http://support.microsoft.com/kb/288771/en-us. It demonstrates how to create a transparent picture for Office CommandBar buttons. But because your code is importing an icon, instead of a bitmap resource, I suggest you read this KB article: How To Add a Transparent Icon to a Toolbar Button http://support.microsoft.com/kb/260850 It provides the workable way to copy icon to bmp for Outlook 2000 system. Though the sample code is in VB, the calls of API are the same in VC. Regards, Jialiang Ge , remove 'online.') Microsoft Online Community Support ================================================= Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: . This posting is provided "AS IS" with no warranties, and confers no rights. ================================================= "Minor, Thomas" wrote in message ... Heallo Jialiang, thanks for your extensive posts on my issue. test it. Based on my experience, Thomas, I feel the problem may lie in your code line: hIcon = theApp.CRL_GetIcon(lIcon, CRL_ENABLED | CRL_SIZE_SMALL); What¡¯s your implementation of CRL_GetIcon? We use a resource dll for whitelabeling the application which implements the function like this: extern "C" HICON CALLBACK CRL_GetIcon(DWORD nID, DWORD dwFlags) { // Tell MFC to use our own resources not those of the loading module // (must be used for every exported function that loads resources). #ifdef _AFXDLL AFX_MANAGE_STATE(AfxGetStaticModuleState()) #endif // Size? INT cx = CrlGetSize_(dwFlags); // Enabled or disabled icon? LPCTSTR pszName = MAKEINTRESOURCE(dwFlags & CRL_DISABLED ? nID +1 : nID); // Note that LoadImage() does not require a subsequent DestroyIcon() in Win32. // Important: If the icon can't be found, return the icon 'empty' to avoid // program crashes when returning NULL as HICON. hIcon = (HICON)LoadImage( AfxGetResourceHandle(), pszName, IMAGE_ICON, cx, cx, LR_DEFAULTCOLOR); // LoadImage fails to load 128x128 icons on some Win9X systems, so use the 64x64 as fallback. if(!hIcon && (cx == 128)) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), pszName, IMAGE_ICON, 64, 64, LR_DEFAULTCOLOR); if(!hIcon) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_CRL_MISC_UNKNOWN_ID), IMAGE_ICON, cx, cx, LR_DEFAULTCOLOR); // LoadImage fails to load 128x128 icons on some Win9X systems, so use the 64x64 as fallback. if(!hIcon && (cx == 128)) hIcon = (HICON)LoadImage( AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_CRL_MISC_UNKNOWN_ID), IMAGE_ICON, 64, 64, LR_DEFAULTCOLOR); return hIcon; } The main difference in our handling seems to be that we load the icon as an icon first and convert it to a bitmap afterwards. We chose this approach to use a generic way to load the icons. Maybe there is a fault in this conversion... --Thomas |
All times are GMT +1. The time now is 12:28 PM. |
|
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com