因此,我开始从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消息)。它只是一个整数类型,其值在运行时确定。这是演员阵容的重点。

10-05 22:42