分类: C/C++
2009-06-26 14:09:12
现在终于真正的开始用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.