GetStockObject Function

本文详细介绍了GetStockObject函数,该函数用于检索系统预定义的标准画笔、画笔、字体和调色板的对象句柄。文章列举了各种可用的标准对象类型,并提供了使用建议。

 

GetStockObject Function

The GetStockObject function retrieves a handle to one of the stock pens, brushes, fonts, or palettes.

Syntax

HGDIOBJ GetStockObject(
  __in  int fnObject
);

Parameters

fnObject [in]

The type of stock object. This parameter can be one of the following values.

ValueMeaning
BLACK_BRUSH

Black brush.

DKGRAY_BRUSH

Dark gray brush.

DC_BRUSH

Solid color brush. The default color is white. The color can be changed by using the SetDCBrushColor function. For more information, see the Remarks section.

GRAY_BRUSH

Gray brush.

HOLLOW_BRUSH

Hollow brush (equivalent to NULL_BRUSH).

LTGRAY_BRUSH

Light gray brush.

NULL_BRUSH

Null brush (equivalent to HOLLOW_BRUSH).

WHITE_BRUSH

White brush.

BLACK_PEN

Black pen.

DC_PEN

Solid pen color. The default color is white. The color can be changed by using the SetDCPenColor function. For more information, see the Remarks section.

NULL_PEN

NULL pen. The null pen draws nothing.

WHITE_PEN

White pen.

ANSI_FIXED_FONT

Windows fixed-pitch (monospace) system font.

ANSI_VAR_FONT

Windows variable-pitch (proportional space) system font.

DEVICE_DEFAULT_FONT

Device-dependent font.

DEFAULT_GUI_FONT

Default font for user interface objects such as menus and dialog boxes. It is not recommended that you use DEFAULT_GUI_FONT or SYSTEM_FONT to obtain the font used by dialogs and windows; for more information, see the remarks section.

The default font is Tahoma.

OEM_FIXED_FONT

Original equipment manufacturer (OEM) dependent fixed-pitch (monospace) font.

SYSTEM_FONT

System font. By default, the system uses the system font to draw menus, dialog box controls, and text. It is not recommended that you use DEFAULT_GUI_FONT or SYSTEM_FONT to obtain the font used by dialogs and windows; for more information, see the remarks section.

The default system font is Tahoma.

SYSTEM_FIXED_FONT

Fixed-pitch (monospace) system font. This stock object is provided only for compatibility with 16-bit Windows versions earlier than 3.0.

DEFAULT_PALETTE

Default palette. This palette consists of the static colors in the system palette.

 

Return Value

If the function succeeds, the return value is a handle to the requested logical object.

If the function fails, the return value is NULL.

Remarks

It is not recommended that you employ this method to obtain the current font used by dialogs and windows. Instead, use the SystemParametersInfo function with the SPI_GETNONCLIENTMETRICS parameter to retrieve the current font. SystemParametersInfo will take into account the current theme and provides font information for captions, menus, and message dialogs.

Use the DKGRAY_BRUSH, GRAY_BRUSH, and LTGRAY_BRUSH stock objects only in windows with the CS_HREDRAW and CS_VREDRAW styles. Using a gray stock brush in any other style of window can lead to misalignment of brush patterns after a window is moved or sized. The origins of stock brushes cannot be adjusted.

The HOLLOW_BRUSH and NULL_BRUSH stock objects are equivalent.

It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.

Both DC_BRUSH and DC_PEN can be used interchangeably with other stock objects like BLACK_BRUSH and BLACK_PEN. For information on retrieving the current pen or brush color, see GetDCBrushColor and GetDCPenColor. See Setting the Pen or Brush Color for an example of setting colors. The GetStockObject function with an argument of DC_BRUSH or DC_PEN can be used interchangeably with the SetDCPenColor and SetDCBrushColor functions.

Examples

For an example, see Setting the Pen or Brush Color.

Requirements

Minimum supported clientWindows 2000 Professional
Minimum supported serverWindows 2000 Server
HeaderWingdi.h (include Windows.h)
LibraryGdi32.lib
DLLGdi32.dll

See Also

Device Contexts Overview Device Context Functions DeleteObject SelectObject

Send comments about this topic to Microsoft

那你把这段代码最关键的几个步骤给我单独列举出来,然后告诉我他们涉及到的知识点以及这样设计的目的:/* The codes below are generated by 'Element Studio'. */ #include <windows.h> #include "resource.h" #include <thread> #include <chrono> #include <functional> // declarations LRESULT __stdcall WndProcdure(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); INT_PTR __stdcall DlgProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); void do_something(std::function<void(void)>); // function defines int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, wchar_t* lpCmdLine, int iCmdShow)//ui线程 注册窗口类 { wchar_t szAppName[] = L"WinApp"; WNDCLASSEX wcex = { 0 }; wcex.cbSize = sizeof(wcex); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = &WndProcdure; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)); wcex.lpszMenuName = NULL; wcex.lpszClassName = szAppName; wcex.hIconSm = wcex.hIcon; if (!RegisterClassEx(&wcex)) { return -1; } HWND hWnd = NULL; hWnd = CreateWindowEx(//创建主窗口 WS_EX_OVERLAPPEDWINDOW, szAppName, L"App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_MESSAGE, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow);//显示窗口 UpdateWindow(hWnd); //创建对话框 HWND hDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProcedure); ShowWindow(hDlg, iCmdShow); UpdateWindow(hDlg); //消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0))//不断获取消息 { TranslateMessage(&msg);//转换键盘消息 DispatchMessage(&msg);//分发消息对应处理函数 } return msg.wParam; } LRESULT __stdcall WndProcdure(//主窗口消息处理 HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC = NULL; PAINTSTRUCT ps; switch (message) { case WM_CREATE: { return 0; } case WM_PAINT: { hDC = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } constinit static HWND hStaticText{ nullptr }; void ui_call_back(void)//回调函数 通知ui更新状态(显示finish) { // switch to ui thread. ::SetWindowText(hStaticText, L"finish!");//更新静态文本显示“finish" } INT_PTR __stdcall//对话框消息处理 DlgProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { hStaticText = ::GetDlgItem(hDlg, IDC_STATIC1);//获取静态文本控件 return false; } case WM_CLOSE: { EndDialog(hDlg, 0); return true; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDCANCEL: { ::PostQuitMessage(0); return true; } case IDOK: { // UI call do... do_something(ui_call_back);//调用后台任务函数 return true; } } return false; } } return false; } using namespace std::chrono_literals; void do_something(std::function<void(void)> cb)//后台线程 { std::jthread th([cb]() -> void//使用多线程来处理 创建一个新的后台线程 分离耗时任务和ui交互 { //模拟了一个耗时操作,如果不使用多线程会导致UI线程被卡住,窗口无法响应鼠标点击,无法刷新。 std::this_thread::sleep_for(5s); cb();//等价于调用 ui_call_back(); }); //通过接收一个std::function类型的cb(回调函数),do_something只需要在任务完成后调用cb()即可 //具体的 UI 更新逻辑(比如显示 “finish!”)由cb决定。 th.detach(); }
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值