真心求大家分析下下面我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;
}
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;
}
解决方案 »
- 对话框 控件 重绘问题
- MFC 编程时处理大量数据 无响应问题
- 用vc6编译出来的总体是windows 98风格的,但List Ctrl,Tree Ctrl等控件中出现的滚动条却是XP风格的,有什么办法让这些滚动条也变成98风格的?
- 如何在DLL中导出资源
- 【箬蒻鄀楉】Windows是基于微内核的,那么?
- 关于GDI问题!救命!
- 紧急求救:window98下不能运行window2000下用atl开发的com组件,怎么解决?
- API串口编程时, 四种握手协议(对MSCOMM控件而言)在DCB中如何设置?
- 请教:图片缩小的问题
- VS 2005 MFC问题
- 如何在屏幕的任意位置绘制鼠标图标
- 继续求助:BeforeNavigate2截获自定义协议mypro://并Navigate2(新url)时,当页面是iframe时,打不开
应该封装到ClientPushManager了去吧要详细代码注释,等LX的
窗口过程回调函数,用来处理消息的
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());
}