赋值后的静态句柄和实例莫名其妙消失了?

赋值后的静态句柄和实例莫名其妙消失了???在线等
先建立一个VC下的SDK工程,然后建立一个CControl类用来存放创建控件属性的代码(就以建立一个GroupBox为例),然后定义两变量static HWND hwndMain;static HINSTANCE hInsMain;再把主窗口的HWND与HINSTANCE放在里面。然后在Control中建立控件的时候引用如下
int CControl::CreateMyWindow(void)
{
HWND hwnd;
hwnd=CreateWindow("BUTTON",
NULL,
WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
100,100,
100,100,
hwndMain, //此处改为this->ControlMain则可以显示
NULL,
hInsMain, //此处改为this->ControlHIns则可以显示
NULL);
if(!hwnd)
  {
  return FALSE;
  }
  return TRUE;
}
如果是hwndMain与hInsMain的话,每次进入该函数(无论静态还是成员函数)时,其地址均会变成0。然后对Control建立两成员变量HWND ControlMain;HINSTANCE ControlHIns;来存放hwndMain与hInsMain,就有值了,是怎么会事,以前没遇到过,请高手解答。以下附我的测试工程,运行到断点处就可以看到其值消失。。。真是奇怪

------解决方案--------------------
static变量的作用域是文件范围的。
------解决方案--------------------
跟踪所有对静态变量赋值的语句执行顺序;或者设置条件断点。
------解决方案--------------------
你现在的写法是在每个cpp中都定义了hwndMain和hInsMain,在不同cpp中可以存在同名变量,在Tst.cpp与Control.cpp中的这两个变量虽然同名,但不是同一个变量。正确写法为:
把stdafx.h中改为
extern HWND hwndMain;
extern HINSTANCE hInsMain;
在某个cpp文件中加入
HWND hwndMain;
HINSTANCE hInsMain;

最后再提醒LZ,要养成良好的变成习惯,尽量避免使用全局变量。像这个问题,应该通过参数把需要的句柄传过去。
------解决方案--------------------
全局变量最好放到cpp文件里申明和赋值,头文件中使用extern修饰符申明一个外部变量,如果头文件中没有使用extern修饰符,则这个头文件被包含多次时会产生多个变量实例。
在某些必须放置到头文件的情况下(比如没有cpp文件),使用__declspec(selectany)来修饰一下变量,这样编译器就不会产生多个变量实例