#pragma comment( lib, "d3dx9.lib" ) \r
#pragma comment( lib, "Shlwapi.lib" ) \r
#pragma comment( lib, "DWMApi.lib" )\r
+#pragma comment( lib,"msimg32.lib")\r
\r
#define THROW_IFERR(hres) \\r
if (FAILED(hres)) { throw sf::win32_error_exception(hres); }\r
{\r
HRESULT hr = S_OK;\r
\r
- ////Create and populate the BlurBehind structre\r
- //DWM_BLURBEHIND bb = {0};\r
- ////Enable Blur Behind and Blur Region;\r
- //bb.dwFlags = DWM_BB_ENABLE;\r
- //bb.fEnable = true;\r
- //bb.hRgnBlur = NULL;\r
+ //Create and populate the BlurBehind structre\r
+ DWM_BLURBEHIND bb = {0};\r
+ //Enable Blur Behind and Blur Region;\r
+ bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;\r
+ bb.fEnable = true;\r
+ bb.hRgnBlur = ::CreateRectRgn(-1,-1,0,0);\r
\r
- ////Enable Blur Behind\r
- //hr = DwmEnableBlurBehindWindow(hwnd, &bb);\r
+ //Enable Blur Behind\r
+ hr = DwmEnableBlurBehindWindow(hwnd, &bb);\r
+ //BOOL allow_ncpaint = TRUE;\r
+ //DwmSetWindowAttribute(hwnd,DWMWA_ALLOW_NCPAINT,&allow_ncpaint,sizeof(BOOL));\r
+ //DWMNCRENDERINGPOLICY policy = DWMNCRP_ENABLED;\r
+ //DwmSetWindowAttribute(hwnd,DWMWA_NCRENDERING_POLICY,&policy,sizeof(policy));\r
+\r
+ \r
//if (SUCCEEDED(hr))\r
//{\r
// //do more things\r
- MARGINS mgn = {-1};\r
- hr = DwmExtendFrameIntoClientArea( hwnd, &mgn );\r
+ //MARGINS mgn = {-1};\r
+ //hr = DwmExtendFrameIntoClientArea( hwnd, &mgn );\r
/* }*/\r
return hr;\r
}\r
return on_timer(wParam);\r
case WM_NOTIFY:\r
return on_notify(reinterpret_cast<NMHDR*>(lParam));\r
+ case WM_DWMCOMPOSITIONCHANGED:\r
+ return on_dwm_composition_changed();\r
+ //case WM_DWMCOLORIZATIONCOLORCHANGED:\r
+ // return on_dwm_colorlizationcolor_changed\r
}\r
\r
// 他のWindowメッセージを派生クラス側でフックできるようにする\r
}\r
\r
template <typename ProcType> \r
- void base_win32_window<ProcType>::create_window()\r
+ void base_win32_window<ProcType>::create_window(HWND parent)\r
{\r
// Create the application window.\r
//\r
// Windowを作成する\r
// Windowを作成する\r
CreateWindowEx(\r
- WS_EX_APPWINDOW | WS_EX_LAYERED ,\r
+ WS_EX_APPWINDOW/* | WS_EX_LAYERED */,\r
name_.c_str(),\r
title_.c_str(),\r
- WS_OVERLAPPEDWINDOW,\r
+ /*WS_OVERLAPPEDWINDOW*/ WS_POPUP,\r
CW_USEDEFAULT,\r
CW_USEDEFAULT,\r
static_cast<uint32_t>(width_),\r
static_cast<uint32_t>(height_),\r
- NULL,\r
+ parent,\r
NULL,\r
HINST_THISCOMPONENT,\r
this\r
\r
\r
// ビュー行列のセットアップ\r
- XMVECTOR eye = XMVectorSet( 0.0f, 3.0f, -6.0f, 0.0f );\r
- XMVECTOR at = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );\r
+ //基本値設定\r
+ float aspect = (float) width_ / height_; //アスペクト比(高さを1としたときの幅)\r
+ float depth = 1.5f; //奥行きZ\r
+ float fovy = (float)atan(1.0f / depth) * 2.0f; //視野をZ=0でデバイスの幅と高さに合わせる\r
+ \r
+ //座標を揃える\r
+ //D3DXMATRIX mat_view;\r
+ //D3DXMatrixLookAtLH( &mat_view, \r
+ // &D3DXVECTOR3( aspect, -1.0f,-depth),\r
+ // &D3DXVECTOR3( aspect, -1.0f, 0.0f),\r
+ // &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );\r
+\r
+ //XMVECTOR eye = XMVectorSet( 0.0f, 3.0f, -6.0f, 0.0f );\r
+ //XMVECTOR at = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );\r
+ //XMVECTOR up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );\r
+ XMVECTOR eye = XMVectorSet( aspect, -1.0f, -depth, 0.0f );\r
+ XMVECTOR at = XMVectorSet( aspect, -1.0f, 0.0f, 0.0f );\r
XMVECTOR up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );\r
mat_view_ = XMMatrixLookAtLH( eye, at, up );\r
cb_never_changes cnc;\r
\r
// 投影行列のセットアップ\r
\r
- mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/width_ / height_, 0.01f, 100.0f );\r
+ //mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/width_ / height_, 0.01f, 100.0f );\r
+ mat_projection_ = XMMatrixPerspectiveFovLH( fovy, aspect, 1.0f, 100.0f );\r
cb_change_on_resize ccor;\r
ccor.mProjection = XMMatrixTranspose( mat_projection_ );\r
// 定数バッファに格納\r
++i;\r
}\r
}\r
+\r
template <typename ProcType>\r
typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_size(uint32_t flag,uint32_t width,uint32_t height)\r
{\r
d3d_context_->UpdateSubresource( cb_change_on_resize_, 0, NULL, &ccor, 0, 0 );\r
\r
// リージョンの設定\r
- HRGN rgn = CreateRectRgn(0, 0, width_, height_);\r
- SetWindowRgn(hwnd_, rgn, FALSE);\r
+ //HRGN rgn = CreateRectRgn(0, 0, width_, height_);\r
+ //SetWindowRgn(hwnd_, rgn, FALSE);\r
\r
}\r
return std::is_same<proc_t,wndproc>::value?0:FALSE; \r
typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_create(CREATESTRUCT *p)\r
{\r
// DWM API\r
- //BOOL dwmEnable;\r
- //DwmIsCompositionEnabled (&dwmEnable); \r
- //if (dwmEnable) EnableBlurBehind(hwnd_);\r
+ BOOL dwmEnable;\r
+ DwmIsCompositionEnabled (&dwmEnable); \r
+ if (dwmEnable) EnableBlurBehind(hwnd_);\r
//DwmEnableComposition(DWM_EC_DISABLECOMPOSITION );\r
\r
// ウィンドウ全体を半透明にする\r
\r
// ウィンドウの指定領域を半透明にする\r
// リージョンの設定\r
- HRGN rgn = CreateRectRgn(0, 0, width_, height_);\r
- SetWindowRgn(hwnd_, rgn, FALSE);\r
+ //HRGN rgn = CreateRectRgn(0, 0, width_, height_);\r
+ //SetWindowRgn(hwnd_, rgn, FALSE);\r
\r
create_device();\r
\r
// }\r
//}\r
render();\r
- return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
+ return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
}\r
\r
template <typename ProcType>\r
\r
d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ );\r
\r
- float color[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; \r
+ float color[4] = { 0.0f, 1.0f, 0.0f, 0.25f }; \r
// 描画ターゲットのクリア\r
d3d_context_->ClearRenderTargetView(view_,color);\r
// 深度バッファのクリア\r
HDC sdc;\r
THROW_IF_ERR(surface->GetDC( FALSE, &sdc ));\r
\r
- get_dc ddc(NULL);\r
+ //get_dc ddc(hwnd_);\r
+ get_window_dc ddc(hwnd_);\r
RECT rc;\r
GetWindowRect(hwnd_,&rc);\r
POINT wnd_pos = {rc.left,rc.top};\r
blend.BlendOp = AC_SRC_OVER;\r
blend.BlendFlags = 0;\r
blend.SourceConstantAlpha = 128; // 不透明度(レイヤードウィンドウ全体のアルファ値)\r
- blend.AlphaFormat = 0;//AC_SRC_ALPHA;\r
+ blend.AlphaFormat = AC_SRC_ALPHA;\r
// デバイスコンテキストにおけるレイヤの位置\r
POINT po;\r
po.x = po.y = 0;\r
BOOL err;\r
- err = UpdateLayeredWindow(hwnd_, ddc.get(), &wnd_pos, &wnd_size, sdc, &po, RGB(255,0,0), &blend, ULW_ALPHA | ULW_COLORKEY );\r
+ err = BitBlt(ddc.get(),0,0,width_,height_,sdc,0,0,SRCCOPY);\r
+ //err = AlphaBlend(ddc.get(),0,0,width_,height_,sdc,0,0,width_,height_,blend);\r
+ //err = UpdateLayeredWindow(hwnd_, ddc.get(), &wnd_pos, &wnd_size, sdc, &po, RGB(255,0,0), &blend, ULW_ALPHA | ULW_COLORKEY );\r
BOOST_ASSERT(err == TRUE);\r
surface->ReleaseDC( NULL);\r
surface.Release();\r
\r
}\r
\r
+ template <typename ProcType>\r
+ typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_dwm_composition_changed()\r
+ {\r
+ BOOL enabled;\r
+ DwmIsCompositionEnabled(&enabled);\r
+ if(enabled)\r
+ {\r
+ EnableBlurBehind(hwnd_);\r
+ }\r
+ return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
+ }\r
template struct base_win32_window<wndproc>;\r
template struct base_win32_window<dlgproc>;\r
\r