wince界面技巧

 
/WINCE应用:
如果一个子对话框里的控件带有TABSTOP风格,而且控件是自画的,此时在子对话框domodal显示后自画的控件会重新paint一次,造成界面闪烁。
如果一个子对话框初始化带有visible风格,主对话框按按钮domodal显示子对话框,在按钮事件里下断点,卡住消息循环,然后在PNP上狂点击按钮区域,
后面的按键消息将会传递到子对话框中,即时此时的按钮事件已经被断点卡住,也会出现点击一直有效的现像。

多个子对话框domodal,要想一次性切回主窗口并且使主窗口不闪烁,需要按照domodal的顺序来关闭子窗口。否则主窗口的按钮会多次被active并闪烁(自画按钮)。

对话框程序初始化隐藏的办法,把domodal改为create,模态窗口改为非模态的:

BOOL CBTPhoneApp::InitInstance()
{
#ifndef UNDER_CE
 AfxEnableControlContainer();
 #ifdef _AFXDLL
  Enable3dControls();   // Call this when using MFC in a shared DLL
 #else
  Enable3dControlsStatic(); // Call this when linking to MFC statically
 #endif
#endif
 g_hWait[0] = CreateEvent(NULL, FALSE, FALSE, NULL);

 CBTPhoneDlg *pDlg = new CBTPhoneDlg ;
 pDlg->Create(IDD_BTPHONE, NULL);//创建但是不显示
 m_pMainWnd = pDlg;
 while(1)
 {
  DWORD dwRet = ::MsgWaitForMultipleObjects(1, g_hWait, TRUE, INFINITE, QS_ALLINPUT);
  if(dwRet == WAIT_OBJECT_0)
  {
   pDlg->DestroyWindow();
   delete pDlg;
   pDlg = NULL;
   break;
  }
  else
  {
   MSG msg;
   while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
  }
 }

 CloseHandle(g_hWait[0]);
 g_hWait[0] = NULL;

 CloseHandle(g_hWakeupInitThread);

 return FALSE;
}
注意QS_ALLINPUT参数,必须为此参数,否则会有的消息收不到,例如POST来的消息。另必须在对话框退出时setevent.
在资源里修改风格是无效的,因为Domodal会始终显示对话框,如果该对话框是主窗口。
///
窗口风格里的Tab_stop或group风格可能会导致窗口点击时产生一个ime窗口,如果此时进行enumwindow会出错,因为ime窗口也是顶层窗口,有可能会替掉真正的主窗口。
/
VS2008里有WM_HOTKEY的消息响应宏,但是VS2005和VS6里面没有。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值