dialog_modeless_v2::dialog_modeless_v2(unsigned p_id,HWND p_parent,HINSTANCE p_instance,bool p_stealfocus) : m_wnd(0), m_status(status_construction), m_stealfocus(p_stealfocus) { SetLastError(NO_ERROR); HWND result = CreateDialogParam(p_instance,MAKEINTRESOURCE(p_id),p_parent,DlgProc,reinterpret_cast<LPARAM>(this)); if (result == 0 || m_wnd == 0) throw exception_win32(GetLastError()); m_status = status_lifetime; }
void win32_accelerator::load(HINSTANCE p_inst,const TCHAR * p_id) { release(); SetLastError(NO_ERROR); m_accel = LoadAccelerators(p_inst,p_id); if (m_accel == NULL) { throw exception_win32(GetLastError()); } }
//! Returns true when signaled, false on timeout bool win32_event::g_wait_for(HANDLE p_event,double p_timeout_seconds) { SetLastError(NO_ERROR); DWORD status = WaitForSingleObject(p_event,g_calculate_wait_time(p_timeout_seconds)); switch(status) { case WAIT_FAILED: throw exception_win32(GetLastError()); default: throw pfc::exception_bug_check(); case WAIT_OBJECT_0: return true; case WAIT_TIMEOUT: return false; } }
void SleepAbortable_MsgLoop(abort_callback & abort, DWORD timeout /*must not be INFINITE*/) { PFC_ASSERT( timeout != INFINITE ); const DWORD entry = GetTickCount(); const HANDLE handles[1] = {abort.get_abort_event()}; for(;;) { const DWORD done = GetTickCount() - entry; if (done >= timeout) return; SetLastError(0); const DWORD status = MsgWaitForMultipleObjects(1, handles, FALSE, timeout - done, QS_ALLINPUT); switch(status) { case WAIT_TIMEOUT: return; case WAIT_OBJECT_0: throw exception_aborted(); case WAIT_OBJECT_0 + 1: ProcessPendingMessages(); default: throw exception_win32(GetLastError()); } } }
HBITMAP g_load_png_gdiplus_throw(HDC dc, const char * fn, unsigned target_cx, unsigned target_cy) { //FIXME m_gdiplus_initialised = (Gdiplus::Ok == Gdiplus::GdiplusStartup(&m_gdiplus_instance, &Gdiplus::GdiplusStartupInput(), NULL)); pfc::string8 canPath; HBITMAP bm = 0; abort_callback_dummy p_abort; file::ptr p_file; filesystem::g_get_canonical_path(fn, canPath); filesystem::g_open_read(p_file, canPath, p_abort); t_size fsize = pfc::downcast_guarded<t_size>(p_file->get_size_ex(p_abort)); pfc::array_staticsize_t<t_uint8> buffer(fsize); p_file->read(buffer.get_ptr(), fsize, p_abort); p_file.release(); IStream *pStream = NULL; HGLOBAL gd = GlobalAlloc(GMEM_FIXED | GMEM_MOVEABLE, buffer.get_size()); if (gd == NULL) throw exception_win32(GetLastError()); void * p_data = GlobalLock(gd); if (p_data == NULL) { GlobalFree(gd); throw exception_win32(GetLastError()); } memcpy(p_data, buffer.get_ptr(), buffer.get_size()); GlobalUnlock(gd); HRESULT hr = CreateStreamOnHGlobal(gd, TRUE, &pStream); if (FAILED(hr)) { GlobalFree(gd); throw exception_win32(hr); } Gdiplus::Bitmap pImage(pStream); CheckGdiplusStatus() << pImage.GetLastStatus(); { Gdiplus::BitmapData bitmapData; //Gdiplus::Bitmap * ppImage = &pImage; if (target_cx != pfc_infinite || target_cy != pfc_infinite) { Gdiplus::Bitmap pBitmapResized(target_cx == pfc_infinite ? pImage.GetWidth() : target_cx, target_cy == pfc_infinite ? pImage.GetHeight() : target_cy, PixelFormat32bppARGB); CheckGdiplusStatus() << pBitmapResized.GetLastStatus(); Gdiplus::Graphics pGraphics(&pBitmapResized); CheckGdiplusStatus() << pGraphics.GetLastStatus(); CheckGdiplusStatus() << pGraphics.SetPixelOffsetMode(Gdiplus::PixelOffsetModeHighQuality); CheckGdiplusStatus() << pGraphics.SetInterpolationMode(Gdiplus::InterpolationModeBicubic); Gdiplus::ImageAttributes imageAttributes; CheckGdiplusStatus() << imageAttributes.SetWrapMode(Gdiplus::WrapModeTileFlipXY); CheckGdiplusStatus() << pGraphics.DrawImage(&pImage, Gdiplus::Rect(0, 0, pBitmapResized.GetWidth(), pBitmapResized.GetHeight()), 0, 0, pImage.GetWidth(), pImage.GetHeight(), Gdiplus::UnitPixel, &imageAttributes); CheckGdiplusStatus() << pBitmapResized.LockBits(&Gdiplus::Rect(0, 0, pBitmapResized.GetWidth(), pBitmapResized.GetHeight()), Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bitmapData); bm = g_CreateHbitmapFromGdiplusBitmapData32bpp(bitmapData); CheckGdiplusStatus() << pBitmapResized.UnlockBits(&bitmapData); } else { CheckGdiplusStatus() << pImage.LockBits(&Gdiplus::Rect(0, 0, pImage.GetWidth(), pImage.GetHeight()), Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bitmapData); //assert bitmapData.Stride == bitmapData.Width bm = g_CreateHbitmapFromGdiplusBitmapData32bpp(bitmapData); CheckGdiplusStatus() << pImage.UnlockBits(&bitmapData); } } return bm; }
void win32_event::create(bool p_manualreset,bool p_initialstate) { release(); SetLastError(NO_ERROR); m_handle = CreateEvent(NULL,p_manualreset ? TRUE : FALSE, p_initialstate ? TRUE : FALSE,NULL); if (m_handle == NULL) throw exception_win32(GetLastError()); }
void win32_menu::create_popup() { release(); SetLastError(NO_ERROR); m_menu = CreatePopupMenu(); if (m_menu == NULL) throw exception_win32(GetLastError()); }
void WIN32_OP_FAIL() { PFC_ASSERT( GetLastError() != NO_ERROR ); throw exception_win32(GetLastError()); }
PFC_NORETURN PFC_NOINLINE void WIN32_OP_FAIL() { const DWORD code = GetLastError(); PFC_ASSERT( code != NO_ERROR ); pfc::string_fixed_t<32> debugMsg; debugMsg << "Win32 error #" << (t_uint32)code; TRACK_CODE( debugMsg, throw exception_win32(code) ); }
PFC_NORETURN PFC_NOINLINE void WIN32_OP_FAIL() { const DWORD code = GetLastError(); PFC_ASSERT( code != NO_ERROR ); throw exception_win32(code); }