我正在MS Visual Studio 2017中编写Windows应用程序,使用Direct 2D Factory对象和按钮时遇到了一些麻烦。 看来,如果我先创建直接2D Factory对象。 运行:
HRESULT AppObject::CreateDeviceIndependentResources(){
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&m_pDirect2dFactory);
return hr;
}
使用存储在“ m_pDirect2dFactory”中的指针正确创建了工厂对象。 该对象指针在创建主窗口之前一直存在:
m_hwnd = CreateWindowEx(0, ...
并通过创建子窗口:
m_hwndRenderView = CreateWindowEx(0,
L"AppChildWindow",
L"ChildWinName", WS_CHILD | WS_BORDER | WS_VISIBLE,
...
但是,当代码创建按钮时:
m_hwndButton = CreateWindow(L"BUTTON",
TEXT("button name"),
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
m_buttonStart_pixX,
cur_button_pixY,
button_pix_width,
button_pix_height,
m_hwnd,
(HMENU)(int)(CORE_BUTTON_IDSTART+1),
(HINSTANCE)GetWindowLong(m_hwnd, GWL_HINSTANCE),
NULL);
指针“ m_pDirect2dFactory”的值更改为明显无效的值,这在以下情况下导致错误 m_pDirect2dFactory-> Release() 叫做。 或者,换句话说,按钮的创建会篡改D2D1CreateFactory创建的工厂对象。
这是一个已知问题吗?