Class: RWin::Menu
- Inherits:
-
Data
- Object
- Data
- RWin::Menu
- Defined in:
- ext/rwin/rw_resources.c
Direct Known Subclasses
Instance Method Summary collapse
- #_hmenu ⇒ Object
- #alive? ⇒ Boolean
- #createmenu ⇒ Object
- #createpopup ⇒ Object
- #delete(v_item, v_flag) ⇒ Object
- #destroy ⇒ Object
-
#GetMenuItemCount ⇒ Object
API Functions.
-
#GetMenuItemID(v_idx) ⇒ Object
// Tnis is obsolate on MSC of WIN64 static VALUE rwmenu_getmenustring(VALUE self, VALUE v_item, VALUE v_flag){ int r; BOOL fByPosition; TCHAR* buff; RwMenu *rm = DATA_PTR(self); RwCheckResource(rm); fByPosition = (NIL_P(v_flag) || !v_flag) ? MF_BYCOMMAND : MF_BYPOSITION; r = GetMenuString(rm->hmenu, NUM2INT(v_item), NULL, 0, fByPosition); if (r==0) return rb_enc_str_new_literal(“”, rw_external_enc); buff = alloca(r*sizeof(WCHAR)); GetMenuString(rm->hmenu, NUM2INT(v_item), buff, r*sizeof(TCHAR), fByPosition); return rw_encode_external(buff); }.
- #GetMenuItemInfo(v_item, v_flag, v_info) ⇒ Object
- #GetSubMenu(v_idx) ⇒ Object
- #insert(*args) ⇒ Object
- #SetMenuItemInfo(v_item, v_flag, v_info) ⇒ Object
Instance Method Details
#_hmenu ⇒ Object
1678 1679 1680 1681 1682 |
# File 'ext/rwin/rw_resources.c', line 1678
static VALUE
rwmenu_hmenu(VALUE self){
RwMenu *rm = DATA_PTR(self);
return ULONG_PTR2NUM((ULONG_PTR)rm->hmenu);
}
|
#alive? ⇒ Boolean
1684 1685 1686 1687 1688 |
# File 'ext/rwin/rw_resources.c', line 1684
static VALUE
rwmenu_alive_p(VALUE self){
RwMenu *rm = DATA_PTR(self);
return rm->hmenu ? Qtrue : Qfalse;
}
|
#createmenu ⇒ Object
1690 1691 1692 1693 1694 1695 1696 |
# File 'ext/rwin/rw_resources.c', line 1690
static VALUE
rwmenu_createmenu(VALUE self){
RwMenu *rm = DATA_PTR(self);
rm->hmenu = CreateMenu();
Register_rsc(rm->hmenu, self);
return self;
}
|
#createpopup ⇒ Object
1698 1699 1700 1701 1702 1703 1704 |
# File 'ext/rwin/rw_resources.c', line 1698
static VALUE
rwmenu_createpopup(VALUE self){
RwMenu *rm = DATA_PTR(self);
rm->hmenu = CreatePopupMenu();
Register_rsc(rm->hmenu, self);
return self;
}
|
#delete(v_item, v_flag) ⇒ Object
1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 |
# File 'ext/rwin/rw_resources.c', line 1801
static VALUE
rwmenu_delete(VALUE self, VALUE v_item, VALUE v_flag){
int r;
UINT fByPosition;
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
fByPosition = (NIL_P(v_flag) || !v_flag) ? MF_BYCOMMAND : MF_BYPOSITION;
if(fByPosition){
HMENU hsubmenu = GetSubMenu(rm->hmenu, NUM2UINT(v_item));
if(hsubmenu){
RwMenu* sm;
VALUE v_sm = Get_rsc(hsubmenu);
RwMenu_Data_Get_Struct(v_sm, sm);
rwmenu_do_destroy(hsubmenu);
sm->hmenu = NULL;
}
}
r = DeleteMenu(rm->hmenu, NUM2UINT(v_item), fByPosition);
if(rm->hwnd) DrawMenuBar(rm->hwnd);
return r? Qtrue : Qfalse;
}
|
#destroy ⇒ Object
1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 |
# File 'ext/rwin/rw_resources.c', line 1790
static VALUE
rwmenu_destroy(VALUE self){
int r;
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
rwmenu_do_destroy(rm->hmenu);
r = DestroyMenu(rm->hmenu);
rm->hmenu = NULL;
return r ? Qtrue : Qfalse;
}
|
#GetMenuItemCount ⇒ Object
API Functions
1823 1824 1825 1826 1827 1828 |
# File 'ext/rwin/rw_resources.c', line 1823
static VALUE
rwmenu_getmenuitemcount(VALUE self){
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
return INT2NUM(GetMenuItemCount(rm->hmenu));
}
|
#GetMenuItemID(v_idx) ⇒ Object
// Tnis is obsolate on MSC of WIN64 static VALUE rwmenu_getmenustring(VALUE self, VALUE v_item, VALUE v_flag)
int r;
BOOL fByPosition;
TCHAR* buff;
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
fByPosition = (NIL_P(v_flag) || !v_flag) ? MF_BYCOMMAND : MF_BYPOSITION;
r = GetMenuString(rm->hmenu, NUM2INT(v_item), NULL, 0, fByPosition);
if (r==0) return rb_enc_str_new_literal("", rw_external_enc);
buff = alloca(r*sizeof(WCHAR));
GetMenuString(rm->hmenu, NUM2INT(v_item), buff, r*sizeof(TCHAR), fByPosition);
return rw_encode_external(buff);
1880 1881 1882 1883 1884 |
# File 'ext/rwin/rw_resources.c', line 1880
static VALUE
rwmenu_getmenuitemid(VALUE self, VALUE v_idx){
RwMenu *rm = DATA_PTR(self);
return INT2FIX(GetMenuItemID(rm->hmenu, FIX2INT(v_idx)));
}
|
#GetMenuItemInfo(v_item, v_flag, v_info) ⇒ Object
1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 |
# File 'ext/rwin/rw_resources.c', line 1830
static VALUE
rwmenu_getmenuiteminfo(VALUE self, VALUE v_item, VALUE v_flag, VALUE v_info){
int r;
CStructData *cs; MENUITEMINFO *pmii;
BOOL fByPosition;
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
if(rb_class_of(v_info)!=ccsMENUITEMINFO){
rb_raise(rb_eArgError, "Argument must be a MENUITEMINFO");
}
CStruct_Data_Get_Struct(v_info, cs); pmii = (MENUITEMINFO*)(cs->dtstr + cs->dtoffset);
pmii->cbSize = sizeof(MENUITEMINFO);
fByPosition = (NIL_P(v_flag) || !v_flag) ? MF_BYCOMMAND : MF_BYPOSITION;
r = GetMenuItemInfo(rm->hmenu, NUM2UINT(v_item), fByPosition, pmii);
return r ? v_info : Qnil;
}
|
#GetSubMenu(v_idx) ⇒ Object
1886 1887 1888 1889 1890 1891 1892 |
# File 'ext/rwin/rw_resources.c', line 1886
static VALUE
rwmenu_getsubmenu(VALUE self, VALUE v_idx){
HMENU hmenu;
RwMenu *rm = DATA_PTR(self);
hmenu = GetSubMenu(rm->hmenu, FIX2INT(v_idx));
return hmenu ? Get_rsc(hmenu) : Qnil;
}
|
#insert(*args) ⇒ Object
1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 |
# File 'ext/rwin/rw_resources.c', line 1706
static VALUE
rwmenu_insert(int argc, VALUE *argv, VALUE self){
int r;
VALUE v_next, v_byposition, v_item, v_type, v_idcmd;
BOOL fByPosition;
MENUITEMINFO *mii;
RwMenu *rm = DATA_PTR(self);
if(argc==3 && rb_class_of(argv[2])==ccsMENUITEMINFO){ /* if MENUITEMINFO */
CStructData *cs;
v_next = argv[0];
v_byposition = argv[1];
fByPosition = (NIL_P(v_byposition) || !v_byposition) ? FALSE : TRUE;
CStruct_Data_Get_Struct(argv[2], cs);
mii = (MENUITEMINFO*)(cs->dtstr + cs->dtoffset);
r = InsertMenuItem(rm->hmenu, FIX2INT(v_next), fByPosition, mii);
} else { /* if Array */
size_t len;
mii = calloc(sizeof(MENUITEMINFO), 1);
rb_scan_args(argc, argv, "41", &v_next, &v_byposition, &v_item, &v_idcmd, &v_type);
mii->cbSize = sizeof(MENUITEMINFO);
if(rb_typeddata_is_kind_of(v_idcmd, &rwmenu_data_type)){
RwMenu* mi;
RwMenu_Data_Get_Struct(v_idcmd, mi);
RwCheckResource(mi);
mii->fMask = MIIM_TYPE | MIIM_SUBMENU;
mii->hSubMenu = mi->hmenu;
} else {
mii->fMask = MIIM_TYPE | MIIM_ID;
mii->wID = FIX2INT(v_idcmd);
}
mii->fType = NIL_P(v_type) ? MFT_STRING : NUM2INT(v_type);
mii->dwTypeData = rw_str2tchar2(v_item, &len);
mii->cch = len/sizeof(TCHAR);
fByPosition = (NIL_P(v_byposition) || !v_byposition) ? FALSE : TRUE;
r = InsertMenuItem(rm->hmenu, FIX2INT(v_next), fByPosition, mii);
free(mii);
}
if(!r) rb_raise(rb_eRuntimeError, "failed to insert menu");
if(rm->hwnd) DrawMenuBar(rm->hwnd);
return self;
}
|
#SetMenuItemInfo(v_item, v_flag, v_info) ⇒ Object
1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 |
# File 'ext/rwin/rw_resources.c', line 1847
static VALUE
rwmenu_setmenuiteminfo(VALUE self, VALUE v_item, VALUE v_flag, VALUE v_info){
CStructData *cs; MENUITEMINFO *pmii;
BOOL fByPosition;
RwMenu *rm = DATA_PTR(self);
RwCheckResource(rm);
if(rb_class_of(v_info)!=ccsMENUITEMINFO){
rb_raise(rb_eArgError, "Argument must be a MENUITEMINFO");
}
CStruct_Data_Get_Struct(v_info, cs); pmii = (MENUITEMINFO*)(cs->dtstr + cs->dtoffset);
pmii->cbSize = sizeof(MENUITEMINFO);
fByPosition = (NIL_P(v_flag) || !v_flag) ? MF_BYCOMMAND : MF_BYPOSITION;
SetMenuItemInfo(rm->hmenu, NUM2UINT(v_item), fByPosition, pmii);
if(rm->hwnd) DrawMenuBar(rm->hwnd);
return self;
}
|