通过与(&)、或(|)运算将基础结构体转换为DWORD_PTR
2014 年 6 月 3 日 通过与(&)、或(|)运算将基础结构体转换为DWORD_PTR无评论
在基础结构体中封装了对象的id(int)和类型(enum),通过如下的结构体定义实现与DWORD_PTR之间的转换,其中将id放在低16位,将type放在高16位。这样可以快速的将数据储存到listctrl、combo等mfc视图中(SetItemData(int, DWORD_PTR)函数):
typedef struct tagMineObject{
tagMineObject(){
id = -1;
type = MINE_OBJECT_NONE;
}
tagMineObject(int id, MINE_OBJECT_TYPE type){
this->id = id;
this->type = type;
}
tagMineObject(DWORD_PTR ptr){
id = (int)(ptr & 0x0000ffff);
type = (MINE_OBJECT_TYPE)(int)((ptr & 0xffff0000)>>16);
}
inline operator const DWORD_PTR() const
{
return (DWORD_PTR)((WORD)id|(((DWORD)(BYTE)(type))<<16));
}
int id;
MINE_OBJECT_TYPE type;
} MineObject;
tagMineObject(){
id = -1;
type = MINE_OBJECT_NONE;
}
tagMineObject(int id, MINE_OBJECT_TYPE type){
this->id = id;
this->type = type;
}
tagMineObject(DWORD_PTR ptr){
id = (int)(ptr & 0x0000ffff);
type = (MINE_OBJECT_TYPE)(int)((ptr & 0xffff0000)>>16);
}
inline operator const DWORD_PTR() const
{
return (DWORD_PTR)((WORD)id|(((DWORD)(BYTE)(type))<<16));
}
int id;
MINE_OBJECT_TYPE type;
} MineObject;
Tags: DWORD_PTR 结构体
发表评论