请问一个非全屏对话框有关问题。

请教一个非全屏对话框问题。。。。。。。。。。。。。。
由于PPC中对话框默认都是全屏的,  
使用m_bFullScreen   =   FALSE确实可以将它设为非全屏对话框。

这时新问题又出现了:     点出软键盘出现后,它自作多情的把我的非全屏对话框大小自动变成填充软键盘以上全部区域。。。     点消失软键盘后,又把对话框自动填充了所有的客户区。

我想实现不管软键盘出现与否,我的非全屏对话框都不变动(即使被软键盘遮盖)。该如何做?

------解决方案--------------------
OnInitDialog里SetWindowPos(HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

如果不成的话NoSize里再Set
------解决方案--------------------
路过。。。

试试 SetWindowPos(&CWnd::wndTop, 。。。。。);
------解决方案--------------------
要是实在不行的话,你就重载一下OnPaint(),然后在OnPaint()中使用MoveWindow()或者SetWindowPos(),这样当软件盘出来的时候屏幕就会自动刷新,你的窗口就可以重新设置大小,这样就避免了它填满整个屏幕
------解决方案--------------------
或者你可以在这个对话框的父窗口中为WM_SETTINGCHANGE消息添加响应函数OnSettingChange(UINT uFlags, LPCTSTR lpszSection),然后判断uFlags, 根据它的值然后操作你对话框的大小.具体如下:
void CFatherDlg::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
CDialog::OnSettingChange(uFlags, lpszSection);

// TODO: Add your message handler code here
if(SPI_SETSIPINFO == uFlags)
{
pSubDlg-> MoveWindow(...); //pSubDlg指向你的那个非全屏的Dialog

InvalidateRect(&rect);
}
}
------解决方案--------------------
我有一个项目中用到非全屏窗口,我刚才查看了一下代码,我的实现方法实际是一个透明窗口加上贴图贴的背景图片,你是否可以按我这方法解决?
------解决方案--------------------
这玩意确实比较烦.我遇到过.

曾经试过在OnActive里面来处理这个问题.
void CWaitingDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);

// TODO: 在此处添加消息处理程序代码
if(nState == 0 && pWndOther != NULL)
GetWindowRect(m_rcWndPos);
else
{
if(!m_rcWndPos.IsRectEmpty() && pWndOther != NULL)
{
MoveWindow(m_rcWndPos);
}
}
}

这样可以实现你想要的那种类似于对话框的效果。但是好象不怎么稳定,TNND,我现在没这么搞了。
你可以试试效果。