因此,我开始从MSDN上的教程中学习Windows C ++编程,并对应用程序状态管理有些困惑。我是编码的新手,所以这可能是一个愚蠢的问题。
该页面显示:
“当您收到WM_NCCREATE和WM_CREATE消息时,lParam
每个消息的参数是指向CREATESTRUCT结构的指针。”
然后:
“这是您提取指向数据结构的指针的方式。首先,
通过转换lParam参数来获得CREATESTRUCT结构。”
并继续
CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);
我没有得到的是,如果lParam已经是一个指向Createstruct的指针,为什么我必须强制转换它?
最佳答案
首先,看看强制转换指针在C中的工作方式:
What are the rules for casting pointers in C?
造成混淆的原因是,对于lParam
消息,虽然CREATESTRUCT
已经是指向WM_CREATE
的指针,但是存储在其中的值取决于消息。它甚至不必是指针(例如,对于WM_SIZE
消息)。它只是一个整数类型,其值在运行时确定。这是演员阵容的重点。