如何在C++中绘制一个Win32控件的边界 我希望所有者在C++ Win32 API中绘制一个红色边框到编辑按钮。请不要MFC。 我已经走了这么远。绘制黑色边框,但大多数(如果不是全部的话)hButtonDC、hButtonBitmap未声明 PAINTS

如何在C++中绘制一个Win32控件的边界 我希望所有者在C++ Win32 API中绘制一个红色边框到编辑按钮。请不要MFC。 我已经走了这么远。绘制黑色边框,但大多数(如果不是全部的话)hButtonDC、hButtonBitmap未声明 PAINTS,c++,winapi,C++,Winapi,如何在C++中绘制一个Win32控件的边界 我希望所有者在C++ Win32 API中绘制一个红色边框到编辑按钮。请不要MFC。 我已经走了这么远。绘制黑色边框,但大多数(如果不是全部的话)hButtonDC、hButtonBitmap未声明 PAINTSTRUCT ps; HDC hdc; HBRUSH hBrush; BeginPaint(hwndButton2, &ps); // Create memory DC to contain hButtonBitmap hButto

如何在C++中绘制一个Win32控件的边界 <>我希望所有者在C++ Win32 API中绘制一个红色边框到编辑按钮。请不要MFC。 我已经走了这么远。绘制黑色边框,但大多数(如果不是全部的话)hButtonDC、hButtonBitmap未声明

PAINTSTRUCT ps;
HDC hdc;
HBRUSH hBrush;
BeginPaint(hwndButton2, &ps);

//  Create memory DC to contain hButtonBitmap

hButtonDC = CreateCompatibleDC(ps.hdc);
hButtonBitmap = SelectObject(hButtonDC, hButtonBitmap);

//  Create second memory DC where the button borders will be drawn and select into this DC an empty bitmap with the
//  size of the button bitmap

hMemDC = CreateCompatibleDC(ps.hdc);
hBitmap = CreateCompatibleBitmap(ps.hdc, ps.rcPaint.right, ps.rcPaint.bottom);
hBitmap = SelectObject(hMemDC, hBitmap);

//  Copy hButtonDC into hMemDC

BitBlt(hMemDC, 0, 0,  ps.rcPaint.right, ps.rcPaint.bottom, hButtonDC, 0, 0, SRCCOPY);

//  Paint the button borders with black pixels (1 pixel width)

PatBlt(hMemDC, 0, 0, ps.rcPaint.right - 1, 1, BLACKNESS);
PatBlt(hMemDC, ps.rcPaint.right - 1, 0, 1, ps.rcPaint.bottom, BLACKNESS);
PatBlt(hMemDC,  0, ps.rcPaint.bottom - 1, ps.rcPaint.right , 1, BLACKNESS);
PatBlt(hMemDC, 0, 0, 1, ps.rcPaint.bottom - 1, BLACKNESS);

//  Paint the button with drawn borders to its window DC, ps.hdc .

BitBlt(ps.hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, hMemDC, 0, 0, SRCCOPY); 

//  Delete hBitmap e hMemDC

DeleteObject(SelectObject(hMemDC, hBitmap));
DeleteDC(hMemDC);

//  Delete hButtonDC

SelectObject(hButtonDC, hButtonBitmap);
DeleteDC(hButtonDC);

EndPaint(hWnd, &ps);

@史蒂夫韦伦斯:如果使用WinAPI的目的是正确的,那么使用WinAPI没有错。将HDC放在hButtonDC前面,将HBITMAP放在hButtonBitmap前面。编写Windows GUI代码并不是开始学习基本编程技能的最佳方式。先解决一些较小的问题,控制台应用程序风格。@Jesse:这是一个相当大的假设。如果没有Bic打火机,用两根棍子点火也没什么错。@Steve:汇编语言必须从Windows API调用函数才能完成任何事情。我只是不明白这是一个多么有效的比较。如果不与API交互,就无法对Windows编程。您唯一能做的就是使用其他人编写的包装器库,它提供了不同程度的API封装。有时这是实用的/有成效的,但有时不是。比如当你不想要巨大的依赖和膨胀的前任。考虑到Windows API在任何地方都被使用,它也不是完全不值得学习的。除此之外,我已经被这条一般性的论据弄得筋疲力尽了。C++也是一种较低的C语言或java语言;这是否意味着它已经过时,没有人应该使用它?@SteveWellens:如果目的正确,使用WinAPI没有什么错。将HDC放在hButtonDC前面,将HBITMAP放在hButtonBitmap前面。编写Windows GUI代码并不是开始学习基本编程技能的最佳方式。先解决一些较小的问题,控制台应用程序风格。@Jesse:这是一个相当大的假设。如果没有Bic打火机,用两根棍子点火也没什么错。@Steve:汇编语言必须从Windows API调用函数才能完成任何事情。我只是不明白这是一个多么有效的比较。如果不与API交互,就无法对Windows编程。您唯一能做的就是使用其他人编写的包装器库,它提供了不同程度的API封装。有时这是实用的/有成效的,但有时不是。比如当你不想要巨大的依赖和膨胀的前任。考虑到Windows API在任何地方都被使用,它也不是完全不值得学习的。除此之外,我已经被这条一般性的论据弄得筋疲力尽了。C++也是一种较低的C语言或java语言;这是否意味着它已经过时,任何人都不应该使用它?