toolbar.cpp
上传用户:kittypts
上传日期:2018-02-11
资源大小:241k
文件大小:3k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /*****************************************************************************
  2. Windows Live Messenger Plugin Demo
  3. Copyright (C) 2008  Hern醤 Di Pietro
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  14. /*****************************************************************************/
  15. #include "wlmplugin.h"
  16. // globals
  17. HookList g_hookList;
  18. WLM_TOPWINDOW g_wlmTopWindow;
  19. WLM_IFACES g_wlmIfaces;
  20. WLM_CONTACTINFOWINDOW g_wlmContactInfoWindow;
  21. CResourceManager g_resMgr;
  22. WLM_DIRECTUIWINDOW g_DUIWindow;
  23. CActionDispatcher g_actDisp;
  24. void AddToolbarButtons(WLM_TOOLBARBUTTON* ptbb, UINT numButtons, 
  25.    char* szXmlRes, char* szStyle, size_t cbXmlBufSz, 
  26.    size_t cbStyleBufSz)
  27. {
  28. UINT uLastRcImg = RESOURCE_ID_BASE;
  29. UINT uImgId;
  30. DWORD dwBytePos = (ptbb->uPosition == TB_INSERT_FIRST ? TB_INSERT_FIRST_BYTE : ptbb->uPosition);
  31. // Build up XML resource
  32. char tmpStyle[MAXSTRL];
  33. char tmpRes[MAXSTRL];
  34. for (UINT i = 0; i < numButtons; i++)
  35. {
  36. sprintf_s(tmpRes,"<Button id=atom(%s) AccRole=57 Class="TransparentButton" Layout=flowlayout(0,2,0,2)"
  37. " Active=MouseandKeyboard|NoSyncFocus Padding=rect(5,4,5,4)>n"
  38. " <element class="ToolbarIcon" ID=Atom(%s)/> </Button> n", 
  39. ptbb[i].szButtonId, ptbb[i].szTButtonId);
  40. uImgId = (ptbb[i].fExtBitmap ? uLastRcImg : ptbb[i].uResID);
  41. sprintf_s(tmpStyle, "nbutton[ID=atom(%s)]n"
  42. "{n"
  43. "AccName:"%s"; n" // button name
  44. "AccRole: 57; n" // see Oleacc.h for MSAA UI roles
  45. "AccDesc:"%s"; n"
  46. "AccDefAction:rcstr(20068); n" // def action for buttons
  47. "ShortcutString:"%s"; n"
  48. "}n element[id=atom(%s)] { content:rcimg(%d); }", ptbb[i].szButtonId, 
  49. ptbb[i].szButtonId, ptbb[i].szTooltip, ptbb[i].szTooltip, 
  50. ptbb[i].szTButtonId, uImgId);
  51. if (i == 0)
  52. {
  53. strcpy_s(szXmlRes, cbXmlBufSz, tmpRes);
  54. strcpy_s(szStyle, cbStyleBufSz, tmpStyle);
  55. } else {
  56. strcat_s (szXmlRes, cbXmlBufSz, tmpRes);
  57. strcat_s (szStyle, cbStyleBufSz, tmpStyle);
  58. }
  59. if (ptbb[i].fExtBitmap)
  60. {
  61. // Perfectly safe to call resource functions since Win32 resource management function
  62. // hooking is not active yet
  63. RESOURCEINFO ri;
  64. ri.uResId = ptbb[i].uResID;
  65. ri.hrsrc = FindResource(ptbb[i].hModule, MAKEINTRESOURCE(ptbb[i].uResID), 
  66. ptbb[i].wszResType);
  67. ri.dwSize = SizeofResource(ptbb[i].hModule, ri.hrsrc);
  68. ri.hResData = LoadResource(ptbb[i].hModule, ri.hrsrc);
  69. ri.pvData = LockResource(ri.hResData);
  70. g_resMgr.RegisterNewResource(WLMRES_BITMAPS, uLastRcImg, ri);
  71. uLastRcImg++;
  72. }
  73. g_actDisp.RegisterAction(ptbb[i].wszButtonId, ptbb[i].pfnAct);
  74. }
  75. g_resMgr.RegisterResource(WLMRES_XMLSTYLE, WLMRES_CONTACT_LIST, szStyle, strlen(szStyle), RR_INSERT,
  76. WLMRES_STYLE_INSERT_POS);
  77. g_resMgr.RegisterResource(WLMRES_XMLUI, WLMRES_CONTACT_LIST, szXmlRes, strlen(szXmlRes), RR_INSERT, dwBytePos);
  78. }