qmenudata.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include <windows.h>
  2. #include "qmenudata.h"
  3. #include "qlist.h"
  4. struct QMenuDataPrivate {
  5. QString menuname;
  6. QList<QMenuDataPrivate> items;
  7. };
  8. QMenuData::QMenuData()
  9. {
  10. d = new QMenuDataPrivate;
  11. d->items.setAutoDelete(TRUE);
  12. }
  13. QMenuData::~QMenuData()
  14. {
  15. delete d;
  16. }
  17. QMenuData::insertItem(const QString& name)
  18. {
  19. QMenuDataPrivate *i = new QMenuDataPrivate;
  20. i->menuname = name;
  21. d->items.append(i);
  22. }
  23. QMenuData::insertItem(const QString& name, QPopupMenu *popup)
  24. {
  25. d->items.append(popup->d);
  26. }
  27. static HMENU createPopupMenu(QMenuDataPrivate *d, const QString& name)
  28. {
  29. static int wIDcounter = 0;
  30. HMENU popup = CreatePopupMenu();
  31. MENUITEMINFO i;
  32. i.cbSize = sizeof(i);
  33. i.fMask = MIIM_DATA|MIIM_ID|MIIM_STATE|MIIM_SUBMENU|MIIM_TYPE;
  34. i.fType = MFT_STRING;
  35. i.fState = MFS_ENABLED;
  36. i.wID = ++wIDcounter;
  37. HMENU submenu = NULL;
  38. if (d->popup)
  39. HMENU submenu = createPopupMenu(d->popup, d->name);
  40. i.hSubMenu = submenu;
  41. i.hbmpChecked = NULL;
  42. i.hbmpUnchecked = NULL;
  43. i.dwItemData = 0;
  44. i.dwTypeData = name;
  45. i.cch = strlen(i.dwTypeData);
  46. for (QMenuDataPrivate::Item *i = items.first(); i != 0; i = items.next()) {
  47. HMENU popup = CreatePopupMenu();
  48. MENUITEMINFO i;
  49. i.cbSize = sizeof(i);
  50. i.fMask = MIIM_DATA|MIIM_ID|MIIM_STATE|MIIM_SUBMENU|MIIM_TYPE;
  51. i.fType = MFT_STRING;
  52. i.fState = MFS_ENABLED;
  53. i.wID = 0;
  54. i.hSubMenu = popup;
  55. i.hbmpChecked = NULL;
  56. i.hbmpUnchecked = NULL;
  57. i.dwItemData = 0;
  58. i.dwTypeData = i->name;
  59. i.cch = strlen(i.dwTypeData);
  60. InsertMenuItem(menu, 0, TRUE, &i);
  61. }
  62. return HMENU;
  63. }
  64. void QMenuData::buildMenu(WId id)
  65. {
  66. HMENU menu = CreateMenu();
  67. for (QMenuDataPrivate::Item *i = items.first(); i != 0; i = items.next()) {
  68. HMENU popup = CreatePopupMenu();
  69. MENUITEMINFO i;
  70. i.cbSize = sizeof(i);
  71. i.fMask = MIIM_DATA|MIIM_ID|MIIM_STATE|MIIM_SUBMENU|MIIM_TYPE;
  72. i.fType = MFT_STRING;
  73. i.fState = MFS_ENABLED;
  74. i.wID = 0;
  75. i.hSubMenu = popup;
  76. i.hbmpChecked = NULL;
  77. i.hbmpUnchecked = NULL;
  78. i.dwItemData = 0;
  79. i.dwTypeData = i->name;
  80. i.cch = strlen(i.dwTypeData);
  81. InsertMenuItem(menu, 0, TRUE, &i);
  82. }
  83. i.wID = 1;
  84. i.hSubMenu = NULL;
  85. i.dwTypeData = "Quit";
  86. i.cch = strlen(i.dwTypeData);
  87. InsertMenuItem(popup, 0, TRUE, &i);
  88. SetMenu(id, menu);
  89. }