关于CS_PARENTDC的问题
用GetDC获取的DC在控件上做图时可以在控件尺寸之外画图,有朋友说因为窗体类风格中CS_PARENTDC这个参数的原因,后来我试图将控件所属类的CS_PARENTDC去掉,但仍没有效果
C/C++ code
后来我发现IDC_FRAME这个静态框的风格中ms没有CS_OWNDC, CS_CLASSDC, CS_PARENTDC这三个东西
但如果将上面的代码改为如下就好了
C/C++ code
不知这个为何
C/C++ code
HWND hwnd; hwnd = GetDlgItem(IDC_FRAME)->GetSafeHwnd(); LONG i = GetWindowLong(hwnd , GWL_STYLE); SetWindowLong(hwnd , GWL_STYLE , i^CS_PARENTDC); HDC hDC; hDC = ::GetDC(hwnd); CDC dc; dc.Attach(hDC); dc.Rectangle(CRect(10,10,57,110));
后来我发现IDC_FRAME这个静态框的风格中ms没有CS_OWNDC, CS_CLASSDC, CS_PARENTDC这三个东西
但如果将上面的代码改为如下就好了
C/C++ code
HWND hwnd; hwnd = GetDlgItem(IDC_FRAME)->GetSafeHwnd(); [color=#FF0000] LONG i = GetWindowLong(m_hWnd , GWL_STYLE);[/color]// 获取主窗体的 [color=#FF0000]SetWindowLong(hwnd , GWL_STYLE , i); [/color]// HDC hDC; hDC = ::GetDC(hwnd); CDC dc; dc.Attach(hDC); dc.Rectangle(CRect(10,10,57,110));
不知这个为何
作者: colorfulcode 发布时间: 2010-08-18
CS_PARENTDC是窗口类的风格,不是窗口的风格。
作者: xxd_qd 发布时间: 2010-08-18
引用 1 楼 xxd_qd 的回复:
CS_PARENTDC是窗口类的风格,不是窗口的风格。
CS_PARENTDC是窗口类的风格,不是窗口的风格。
呃......
弱弱的问下,
那有没有什么类似SetWindowLong的函数来修改窗口类呢
作者: colorfulcode 发布时间: 2010-08-18
LONG i = GetWindowLong(m_hWnd , GWL_STYLE);// 获取主窗体的
SetWindowLong(hwnd , GWL_STYLE , i); //
这样就好了?不可能吧,应该是SetWindowLong(hwnd , GWL_STYLE , i | WS_CLIPSIBLINGS)才会好吧。
SetWindowLong(hwnd , GWL_STYLE , i); //
这样就好了?不可能吧,应该是SetWindowLong(hwnd , GWL_STYLE , i | WS_CLIPSIBLINGS)才会好吧。
作者: xxd_qd 发布时间: 2010-08-18
引用 3 楼 xxd_qd 的回复:
LONG i = GetWindowLong(m_hWnd , GWL_STYLE);// 获取主窗体的
SetWindowLong(hwnd , GWL_STYLE , i); //
这样就好了?不可能吧,应该是SetWindowLong(hwnd , GWL_STYLE , i | WS_CLIPSIBLINGS)才会好吧。
LONG i = GetWindowLong(m_hWnd , GWL_STYLE);// 获取主窗体的
SetWindowLong(hwnd , GWL_STYLE , i); //
这样就好了?不可能吧,应该是SetWindowLong(hwnd , GWL_STYLE , i | WS_CLIPSIBLINGS)才会好吧。
我这边试了下,确实可以的
作者: colorfulcode 发布时间: 2010-08-18
引用 2 楼 colorfulcode 的回复:
引用 1 楼 xxd_qd 的回复:
CS_PARENTDC是窗口类的风格,不是窗口的风格。
呃......
弱弱的问下,
那有没有什么类似SetWindowLong的函数来修改窗口类呢
引用 1 楼 xxd_qd 的回复:
CS_PARENTDC是窗口类的风格,不是窗口的风格。
呃......
弱弱的问下,
那有没有什么类似SetWindowLong的函数来修改窗口类呢
SetClassLong。
不过这个我也没用过。不知道修改完了以后是否生效,或者对已创建的窗口是否生效。
作者: xxd_qd 发布时间: 2010-08-18
获取了一下控件的窗口类风格,发现
hwnd = GetDlgItem(IDC_FRAME)->GetSafeHwnd();
LONG i = GetClassLong(hwnd , GWL_STYLE);
CS_OWNDC, CS_CLASSDC, CS_PARENTDC这三个没有一个被设置,那你之前说的,应该有个CS_PARENTDC吧
hwnd = GetDlgItem(IDC_FRAME)->GetSafeHwnd();
LONG i = GetClassLong(hwnd , GWL_STYLE);
CS_OWNDC, CS_CLASSDC, CS_PARENTDC这三个没有一个被设置,那你之前说的,应该有个CS_PARENTDC吧
作者: colorfulcode 发布时间: 2010-08-18
LONG i = GetClassLong(hwnd , GCL_STYLE);
话说你怎么要这么麻烦,查窗口的各种属性用Spy看看不是很简单吗?有工具干嘛不用。
话说你怎么要这么麻烦,查窗口的各种属性用Spy看看不是很简单吗?有工具干嘛不用。
作者: xxd_qd 发布时间: 2010-08-18