VST Pluginのエディット画面をビットマップ化する部分のまとめ。 結局、VST Pugin ウィンドウをCreateした最後に下記のコードを入れた。 SetForegroundWindow(m_hWnd); ::UpdateWindow(m_hWnd); sf::view::save_bitmap(name,m_width,m_height,m_hWnd); save_bitmap関数本体はこんなもの。 void save_bitmap(const string& name,const int width,const int height,HWND hwnd,int max_width) { // capture bitmap graphics_api<em>gdiplus::init(); WTL::CDC dc</em>; WTL::CClientDC dcsrc<em>(hwnd); dc</em>.CreateCompatibleDC(dcsrc<em>); WTL::CBitmap bmp</em>; bmp<em>.CreateCompatibleBitmap(dcsrc</em>,width,height); HBITMAP oldbmp<em> = dc</em>.SelectBitmap(bmp<em>); dc</em>.BitBlt(0,0,width,height,dcsrc<em>,0,0,SRCCOPY); dc</em>.SelectBitmap(oldbmp<em>); Gdiplus::Graphics graph</em>(dc<em>); Gdiplus::Bitmap bmpf</em>(bmp_,NULL); CLSID pngClsid; Gdiplus::GetEncoderClsid(L"image/png", &pngClsid); string fname = name + _T(".png"); if(width > max_width) { boost::scoped<em>ptr<Gdiplus::Image> p</em>(bmpf_.GetThumbnailImage(max_width,height * max<em>width / width)); p</em>->Save(CT2W(fname.c<em>str()),&pngClsid,NULL); } else { bmpf</em>.Save(CT2W(fname.c_str()),&pngClsid,NULL); } }; WTL,GDI+,APIを使った合作だ。