关于窗口拖动时用DrawDragRect 画虚边框的用法请教
各位高手,
最近本人做了一个程序的界面,因为这个界面是异形的,所以属性就是NONE的了
必须自己通过处理实现拉伸,并希望其拉伸的时候呈现放大缩小的虚框效果。
现在,拉伸效果已经实现,但是,点击鼠标拖拉的时候,虚框的位置就是不对
而且,当松开鼠标后,虚框的线条无法自动擦除……
本人目前用如下代码,但无奈效果不佳:
- C/C++ code
//如下,此函数当鼠标点击按下时候进行调用,//但是虚框的位置不对……//至于松开的时候如何去除虚框本人还不明确void CTestDlg::DrawMoveRect(int xx1,int yy1){ HDC hDC; hDC = ::GetDC(NULL); //取得全屏幕设备描述句柄 CDC * pDC = CDC::FromHandle(hDC); CRect rtClient; GetWindowRect(&rtClient); //rtClient.left = xx1; //rtClient.right= rtClient.left+ rtClient.Width();//宽度是 200 //rtClient.top = yy1; //rtClient.bottom=rtClient.top + rtClient.Height(); if (pDC) { int oldrop; oldrop = pDC->SetROP2(R2_XORPEN); pDC->DrawDragRect(rtClient, CSize(1,1), m_oldRect, CSize(1,1)); //size 是 边框的宽 pDC->SetROP2(oldrop); //恢复原来作图方式 } m_oldRect.CopyRect(rtClient); ::ReleaseDC(NULL, hDC);} 哪位比较熟悉虚框画法的,还请赐教!
[解决办法]
GetWindowRect获取的是屏幕坐标,需要ScreenToClient转成窗口客户区坐标。
拖动时先在上次的位置再画一次就擦除了,然后再在新位置上画。
[解决办法]
你是不是可以考虑用一个辅助的窗口
当拖动的时候显示这个窗口
而这个窗口就是一个镂空的用来显示虚框的窗口
这样你想画成什么样都可以
而且比较好控制
一家之言,即供参考
[解决办法]