将变量作为App的成员变量可以在任何地方使用
AfxGetApp()获取你的App实例,从而获取该变量值。

解决方案 »

  1.   

    可以建立,如果两个窗口在同一个线程中,简单的方法是定义一个全局的数组,也可以定义在CXXApp中。不在同一个线程中,就使用内存文件映射。
      

  2.   

    用内存映射文件可以,我不知道如果一个单文档应用程序启动时,应该在那里判断是否已经有自身的实例启动,并且退出自己呢,能否发给一个程序?
    [email protected]
      

  3.   

    应该在App的初始化代码处判断
    比较常见的是利用Mutex来实现
      

  4.   

    是否检查到有程序加载就
    在BOOL CMyApp::InitInstance()
    {
        if (程序以加载)return FALSE;
    }
    顺便问一个问题,我想实现当已经有实例运行,之后的实例不运行,而是应该激活
    先前实例,使用Mutex信号量可以做到么?如果可以,如何做
    我想应用程序启动时,建立内存映射文件,并向其中写入我的标志信息,如状态,窗口句柄。这样一边之后的程序可以利用这些信息进行激活操作。
    看书写了如下代码:
    hMapping=CreateFileMapping(
            (HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x0100,"MYSHARE");
    if(hMapping==NULL)
    {
        cout<<"Error";
        exit(1);
     }
    int *i;
    i=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    *i=998;
    这里我想不通一个问题,使用MapViewOfFile进行内存的映射,看到Msdn中函数原型如下:
    LPVOID MapViewOfFile(
      HANDLE hFileMappingObject,  // file-mapping object to map into 
                                  // address space
      DWORD dwDesiredAccess,      // access mode
      DWORD dwFileOffsetHigh,     // high-order 32 bits of file offset
      DWORD dwFileOffsetLow,      // low-order 32 bits of file offset
      DWORD dwNumberOfBytesToMap  // number of bytes to map
    );
    我觉得其中 dwFileOffsetHigh dwFileOffsetLow指出了映射的偏移地址,我觉得应该是相对于前面使用CreateFileMapping中第二个参数0x0100指定的空间大小的偏移指针返回给我的 int *i;这时我对该指针的操作就应该是对这个空间的使用
    但我写了如下语句,试图再次调用MapViewOfFile再从我的0x100大小空间返回一个偏移指针,对其进行修改。
    如 int *j;
    j=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,10,0);<--试图偏移10个字节,但当执行下句时会出错。
    *j=998;
    没办法我只能使用一次int *i;后 令 int *j; j=i+10; *j=99;
    不知道如果把应用程序句柄等几个变量以这种方式存入,是否可以达到我的功能。
    问问小问题,如何知道一个应用程序的句柄,激活它。我这样做可以么〉