哪位高手能帮小弟我完成这样一个窗口:非模式、透明、无标题栏但可以响应鼠标的拖动(象拖有标题栏的窗口一样)
谁能帮我完成这样一个窗口:非模式、透明、无标题栏但可以响应鼠标的拖动(象拖有标题栏的窗口一样)?
象许多下载软件(讯雷、网络快车)的浮动窗口一样。
谢谢!
------解决方案--------------------
非模式:你理解什么是模式什么是非模式不?如果这个都不知的话去看书吧
透明:用SetLayeredWindowAttributes这个函数,具体的查msdn,给一个例子你参考一下
http://www.vckbase.com/document/viewdoc/?id=768
无标题栏但可以响应鼠标的拖动:自己响应一下鼠标消息即可
做人不能太懒,太懒对你一点好处都没有
不懂没关系,只要你肯学肯动手
------解决方案--------------------
无标题拖动:
在下面的函数中返回HTCAPTION就可以了
afx_msg UINT OnNcHitTest(
CPoint point
);
其他的ls已经解答了
------解决方案--------------------
CDialog dlg;
dlg.create(xxxx);
Create函数的参数里可以设置自定义风格。
当然,最好你自己从CDialog类派生,然后对一些功能函数进行重载,实现你需要的功能
------解决方案--------------------
非模式的话 重载对话框的creat函数,在要弹出对话框的地方new一个就好了,
透明只是一个属性,函数如下
void CWindowToolDlg::Flash(UINT ID)
{
//ID用来表示透明程度的,当然如果你要设定一个透明度的话拿掉这个好了
if (ID > = ID_PENE0 && ID <= ID_PENE9)
{
int i = ID - ID_PENE0;
int nTransparency = 255 * (10 - i)/10;
HINSTANCE hInst = LoadLibrary( "User32.DLL ");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//get function SetLayeredWindowAttributes point
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes ");
if(fun)fun(this-> GetSafeHwnd(),10,nTransparency,2);
FreeLibrary(hInst);
}
}
UpdateWindow();
}
无标题栏直接可以在对话框内设置,
而可以响应鼠标拖动消息的话 只要重载OnLButtonDown消息 添加这样一句话
::SendMessage(this-> GetSafeHwnd(),WM_NCLBUTTONDOWN,HTCAPTION,nFlags);
就可以了
------解决方案--------------------
都说的差不多了,接点分多高兴。
象许多下载软件(讯雷、网络快车)的浮动窗口一样。
谢谢!
------解决方案--------------------
非模式:你理解什么是模式什么是非模式不?如果这个都不知的话去看书吧
透明:用SetLayeredWindowAttributes这个函数,具体的查msdn,给一个例子你参考一下
http://www.vckbase.com/document/viewdoc/?id=768
无标题栏但可以响应鼠标的拖动:自己响应一下鼠标消息即可
做人不能太懒,太懒对你一点好处都没有
不懂没关系,只要你肯学肯动手
------解决方案--------------------
无标题拖动:
在下面的函数中返回HTCAPTION就可以了
afx_msg UINT OnNcHitTest(
CPoint point
);
其他的ls已经解答了
------解决方案--------------------
CDialog dlg;
dlg.create(xxxx);
Create函数的参数里可以设置自定义风格。
当然,最好你自己从CDialog类派生,然后对一些功能函数进行重载,实现你需要的功能
------解决方案--------------------
非模式的话 重载对话框的creat函数,在要弹出对话框的地方new一个就好了,
透明只是一个属性,函数如下
void CWindowToolDlg::Flash(UINT ID)
{
//ID用来表示透明程度的,当然如果你要设定一个透明度的话拿掉这个好了
if (ID > = ID_PENE0 && ID <= ID_PENE9)
{
int i = ID - ID_PENE0;
int nTransparency = 255 * (10 - i)/10;
HINSTANCE hInst = LoadLibrary( "User32.DLL ");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//get function SetLayeredWindowAttributes point
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes ");
if(fun)fun(this-> GetSafeHwnd(),10,nTransparency,2);
FreeLibrary(hInst);
}
}
UpdateWindow();
}
无标题栏直接可以在对话框内设置,
而可以响应鼠标拖动消息的话 只要重载OnLButtonDown消息 添加这样一句话
::SendMessage(this-> GetSafeHwnd(),WM_NCLBUTTONDOWN,HTCAPTION,nFlags);
就可以了
------解决方案--------------------
都说的差不多了,接点分多高兴。