void GUISetIcon(heroWindow* hwnd, int f, std::string& p) { GUISetIcon(hwnd, f, &p[0]); }
void WndSetIcon( a_window *wnd, gui_resource *icon ) { GUISetIcon( wnd->gui, icon ); }
bool GUIXCreateWindow( gui_window *wnd, gui_create_info *info, gui_window *parent ) { DWORD style; HMENU hmenu; gui_coord pos; gui_coord size; HWND parent_hwnd; LPSTR class_name; HWND hwnd; wmcreate_info wmcreateinfo; HWND frame_hwnd; HWND client_hwnd; #ifdef __OS2_PM__ ULONG frame_flags; ULONG flags; ULONG show_flags; WPI_RECT rect; WPI_RECT parent_client; #else DWORD exstyle; #endif #ifdef __OS2_PM__ // Get rid of the changable font style for PM GUI app's info->style &= ~GUI_CHANGEABLE_FONT; #endif wnd->root_pinfo.force_count = NUMBER_OF_FORCED_REPAINTS; wnd->hwnd_pinfo.force_count = NUMBER_OF_FORCED_REPAINTS; wnd->parent = parent; style = COMMON_STYLES; if( parent == NULL ) { parent_hwnd = HWND_DESKTOP; if( !( info->style & GUI_POPUP ) ) { wnd->flags |= IS_ROOT; } } else { parent_hwnd = parent->hwnd; if( !( info->style & GUI_POPUP ) ) { style |= CHILD_STYLE; } } hmenu = NULLHANDLE; if( !GUISetupStruct( wnd, info, &pos, &size, parent_hwnd, &hmenu ) ) { return( FALSE ); } if( !(wnd->style & GUI_NOFRAME) ) { if( info->text ) { style |= WS_CAPTION; wnd->flags |= HAS_CAPTION; } else { style |= WS_BORDER; } } if( info->style & GUI_RESIZEABLE ) { style |= WS_THICKFRAME; } if( info->scroll & GUI_HSCROLL ) { style |= WS_HSCROLL; } if( info->scroll & GUI_VSCROLL ) { style |= WS_VSCROLL; } if( wnd->flags & HAS_CAPTION ) { if( info->style & GUI_MAXIMIZE ) { style |= WS_MAXIMIZEBOX; } if( info->style & GUI_MINIMIZE ) { style |= WS_MINIMIZEBOX; } if( info->style & GUI_SYSTEM_MENU ) { style |= WS_SYSMENU; } } else { wnd->style &= ~(GUI_MAXIMIZE|GUI_MINIMIZE|GUI_SYSTEM_MENU); info->style &= ~(GUI_MAXIMIZE|GUI_MINIMIZE|GUI_SYSTEM_MENU); } if( info->style & GUI_POPUP ) { style |= WS_POPUP; } if( info->style & GUI_DIALOG_LOOK ) { style |= GUI_DIALOG_STYLE; class_name = GUIDialogClass; } else { class_name = GUIClass; } wnd->font = GUIGetSystemFont(); GUIInitHint( wnd, info->num_menus, info->menu, MENU_HINT ); GUISetGUIHint( wnd ); wmcreateinfo.size = sizeof(wmcreate_info); wmcreateinfo.wnd = wnd; wmcreateinfo.info = info; hwnd = NULLHANDLE; frame_hwnd = NULLHANDLE; client_hwnd = NULLHANDLE; #ifdef __OS2_PM__ /* frame */ flags = FCF_TASKLIST | FCF_NOBYTEALIGN; frame_flags = 0; if( wnd->flags & HAS_CAPTION ) { flags |= FCF_TITLEBAR; if( info->style & GUI_SYSTEM_MENU ) { flags |= FCF_SYSMENU; } if( info->style & GUI_MAXIMIZE ) { flags |= FCF_MAXBUTTON; } if( info->style & GUI_MINIMIZE ) { flags |= FCF_MINBUTTON; } flags |= FCF_BORDER; } else { if( !(wnd->style & GUI_NOFRAME) ) { flags |= FCF_BORDER; frame_flags |= FS_BORDER; } wnd->style &= ~(GUI_MAXIMIZE|GUI_MINIMIZE|GUI_SYSTEM_MENU); info->style &= ~(GUI_MAXIMIZE|GUI_MINIMIZE|GUI_SYSTEM_MENU); } if( info->style & GUI_RESIZEABLE ) { flags |= FCF_SIZEBORDER; } if( parent_hwnd == HWND_DESKTOP ) { if( info->num_menus > 0 ) { //flags |= FCF_MENU; } } if( info->scroll & GUI_HSCROLL ) { flags |= FCF_HORZSCROLL; } if( info->scroll & GUI_VSCROLL ) { flags |= FCF_VERTSCROLL; } if( info->style & GUI_DIALOG_LOOK ) { flags |= FCF_DLGBORDER; } if( info->style & GUI_POPUP ) { flags |= FCF_NOMOVEWITHOWNER; } frame_hwnd = WinCreateStdWindow( parent_hwnd, frame_flags | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, &flags, NULL, info->text, 0, (HMODULE)0, 0, NULL ); if( frame_hwnd != NULLHANDLE ) { oldFrameProc = _wpi_subclasswindow( frame_hwnd, (WPI_PROC)GUIFrameProc ); _wpi_setmenu( frame_hwnd, hmenu ); _wpi_getclientrect( parent_hwnd, &parent_client ); show_flags = SWP_SIZE | SWP_MOVE; WinSetWindowPos( frame_hwnd, HWND_TOP, pos.x, pos.y, size.x, size.y, show_flags ); hwnd = frame_hwnd; if( parent_hwnd == HWND_DESKTOP ) { wnd->root_frame = frame_hwnd; } else { wnd->hwnd_frame = frame_hwnd; } _wpi_getclientrect( frame_hwnd, &rect ); client_hwnd = WinCreateWindow( frame_hwnd, class_name, NULL, WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, rect.xLeft, rect.yBottom, rect.xRight-rect.xLeft, rect.yTop-rect.yBottom, frame_hwnd, HWND_TOP, FID_CLIENT, &wmcreateinfo, NULL ); if( client_hwnd == NULLHANDLE ) { WinDestroyWindow( frame_hwnd ); frame_hwnd = NULLHANDLE; hwnd = NULLHANDLE; } } #else exstyle = WS_EX_NOPARENTNOTIFY; #ifdef __NT__ if( info->style & GUI_3D_BORDER ) { exstyle |= WS_EX_CLIENTEDGE; style &= ~WS_BORDER; } #endif hwnd = _wpi_createwindow_ex( exstyle, class_name, info->text, style, 0, 0, pos.x, pos.y, size.x, size.y, parent_hwnd, hmenu, GUIMainHInst, &wmcreateinfo, &frame_hwnd ); #endif if( hwnd == NULLHANDLE ) { return( FALSE ); } GUISetIcon( wnd, info->icon ); if( info->style & (GUI_INIT_MAXIMIZED|GUI_INIT_MINIMIZED) ) { GUISetRedraw( wnd, FALSE ); if( info->style & GUI_INIT_MAXIMIZED ) { GUIMaximizeWindow( wnd ); } else if( info->style & GUI_INIT_MINIMIZED ) { GUIMinimizeWindow( wnd ); } GUISetRedraw( wnd, TRUE ); if( wnd->style & GUI_INIT_INVISIBLE ) { _wpi_showwindow( hwnd, SW_HIDE ); } } if( !(wnd->style & GUI_INIT_INVISIBLE ) ) { GUIShowWindowNA( wnd ); } return( wnd != NULL ); }