逆风飞扬  
顺风也好,逆风也罢,都是驾驭风力而已,君子性非异也,善假与物也。逆风飞扬,也能飞得更高,更远!

现在终于真正的开始用vc来编程了.好多问题真是把我搞晕头了.最近在编程的过程中遇到了几个小问题,在不少朋友的帮助下总算是解决了.总结了一下,做了一个test demo.涉及到的几个知识点分别如下.

1.窗体右上角的OK按钮变X.在mobile系统中,正常的情况下,ok表示关闭,X表示最小化.默认情况下,窗体都是ok.点击即关闭.如果想让ok变成X,则在窗体初始化的时候加上这句话即可.

::SHDoneButton(m_hWnd,SHDB_HIDE);// 右上角按钮变成叉
ModifyStyle(m_hWnd,WS_CAPTION,WS_MINIMIZEBOX,SWP_NOSIZE); 从查到的资料上讲也需要第二句,但我没用也可以的.

2.截获窗体最小化消息.当ok变成X后,这时点击X就是把窗体最小化了.有时候我们想截获到这个最小化消息,进行某些处理.比如想实现点X关闭系统.那么就得截获这个消息,然后执行onok().或者最小化后,实现系统消息图标.(后面会讲到).这时就需要重载WindowProc函数了.

LRESULT CDemoDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 if(message == WM_SIZE)
 {
  if(wParam == SIZE_MINIMIZED)// we can get minsize message here
  {
   //OnOK();// if you want to exit by X button.

    //hide window and show icon at information bar.
   AddSHNotification();
   this->ShowWindow(SW_HIDE);
   CWnd * desthwnd = GetDesktopWindow();
   ::SetForegroundWindow(desthwnd->m_hWnd);
   return 1;
  }
 }
 return CDialog::WindowProc(message, wParam, lParam);
}

3.最小化到桌面的通知栏. 想实现最小化后,在通知栏出现一个图标,然后点击图标,重新激活程序.这个和mobile qq的功能差不多. 这就用到了AddSHNotification和SHNotificationRemove 等API. 无聊客的blog上关于这个讲的非常详细.可以去参考.我也是参考了他讲的内容.非常感谢无聊客.

4.横屏切换.大多数情况下,都是在onsize函数里重置控件的位置大小.其实可以做两个窗体界面,然后在横屏切换的时候,加载不通的窗体界面.我们在新建项目的时候也会看到,向导会自动生成了一个以_WIDE结尾的窗体.这个就是横屏的窗体,我们可以在这个界面上布置我们横屏时的窗体控件.具体使用的时候,在onsize事件里判断.要注意的是,必须在初始化的时候加上这么一句:

fxEnableDRA(TRUE);//in order to change wide form. 

#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CDemoDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
 if (AfxIsDRAEnabled())
 {
  DRA::RelayoutDialog(
   AfxGetResourceHandle(),
   this->m_hWnd,
   DRA::GetDisplayMode() != DRA::Portrait ?
   MAKEINTRESOURCE(IDD_DEMO_DIALOG_WIDE) :
   MAKEINTRESOURCE(IDD_DEMO_DIALOG));
 }
}
#endif

嗯,先写这么多,累了.把源码附上,OK.

/Files/qqiangsir/ComboBoxDemo.rar

posted on 2009-02-15 22:01  逆风飞扬  阅读(1964)  评论(7编辑  收藏  举报