真心求大家分析下下面我2通宵没看懂的代码中的消息循环!感谢一辈子
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR    lpCmdLine,
int       nCmdShow) {
    int ret = 0;
    
    // Init log.
    LOG.setLogPath(CP_LOG_PATH);
    LOG.setLogName(CP_LOG_NAME);
    LogLevel l = getLOGLevel();
    LOG.setLevel(l);
    
    // Start CP.
    ClientPushManager* cp = ClientPushManager::getInstance();
    cp->startCP(GetModuleHandle(0));    return ret;
}HANDLE ClientPushManager::startCP(HANDLE moduleHandle) {    if (cpThread) {
        stopThread(cpThread);
    }    
    
    initClientPush((LPVOID)moduleHandle);
    return cpThread;
}
DWORD WINAPI initClientPush(LPVOID moduleHandle) {
    
    MSG         msg;
    int         rc = 0;
    HRESULT     hr = S_OK;    SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);    
    
    ClientPushManager* cpManager = ClientPushManager::getInstance();
    try {
        // initialize the tree  
        cpManager->dmt = DMTreeFactory::getDMTree(APPLICATION_URI);
        if (!cpManager->dmt)  { LOG.error("CP: dmt is wrong!!!"); }
        cpManager->node = cpManager->dmt->readManagementNode(APPLICATION_URI);
        if (!cpManager->node) { LOG.error("CP: node is wrong!!!");}
        
        cpManager->initCommonVar();        // Initialize application
        rc = cpManager->createClientPushClasses(cpManager, (HANDLE)moduleHandle);
        if (rc < 0) {
            LOG.error("CP: Error in creating the push class. Exit...");        
            return rc;
        }
        LOG.info("CP: Client push class created");        
        // Init POOM        LOG.debug("Init Poom");
        hr = cpManager->InitPOOM();
        CHR(hr);
        
        LOG.debug("CP: Log on the IPOutlookApp2 interface");    
        hr = cpManager->g_polApp->Logon((long)cpManager->cp_hWnd); 
        CHR(hr);
        LOG.debug("CP: Subscription of Contact folder...");
        cpManager->subscribeContact();
        if (hr == S_OK) {
            LOG.info("CP: Contact folder subscribed.");
        }
        LOG.debug("CP: Subscription of Calendar folder...");
        cpManager->subscribeCalendar();
        if (hr == S_OK) {
            LOG.info("CP: Calendar folder subscribed.");
        }
        LOG.info("CP: Subscription of Task folder...");
        cpManager->subscribeTask();
        if (hr == S_OK) {
            LOG.info("CP: Task folder subscribed.");
        }         
        
        // new for brifcase
        LOG.info("CP: Subscription of Briefcase folder...");
        cpManager->subscribeBriefcase();
        if (hr == S_OK) {
            LOG.info("CP: Briefcase folder subscribed.");
        }         // new for notes
        LOG.info("CP: Subscription of Notes folder...");
        cpManager->subscribeNotes();
        if (hr == S_OK) {
            LOG.info("CP: Notes folder subscribed.");
        }         // new for picture
        LOG.info("CP: Subscription of Picture folder...");
        cpManager->subscribePicture();
        if (hr == S_OK) {
            LOG.info("CP: Piacture folder subscribed.");
        }         LOG.info("CP: Init waiting PIM notification messages...");
        // Main message loop
        while (GetMessage(&msg, NULL, 0, 0)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    } catch(...) {
        LOG.error("CP: Generic error in client Push: Error = 0x%x", GetLastError());
    }Error:
       
    // UnInit POOM
    cpManager->UnInitPOOM();      
    UnregisterClass(cpManager->cp_wncClass.lpszClassName, cpManager->cp_wncClass.hInstance);    
    
    return 0;
}

解决方案 »

  1.   

    看不到WndProc
    应该封装到ClientPushManager了去吧要详细代码注释,等LX的
      

  2.   

    re:WndProc
    窗口过程回调函数,用来处理消息的
      

  3.   

      // Initialize application
      rc = cpManager->createClientPushClasses(cpManager, (HANDLE)moduleHandle);
      if (rc < 0) {
      LOG.error("CP: Error in creating the push class. Exit...");   
      return rc;
      }
      LOG.info("CP: Client push class created");   
      LOG.info("CP: Init waiting PIM notification messages...");
      // Main message loop
      while (GetMessage(&msg, NULL, 0, 0))  
      {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
      }
      } catch(...) {
      LOG.error("CP: Generic error in client Push: Error = 0x%x", GetLastError());
      }