в функции OnInitDialog из реестра считывается прошлое состояние окна приложения (Minimized/Maximized) и потом соответсвенно либо показываю окно либо не показываю.
Не показываю таким образом:
if (!m_bIsForegroundWnd)
this->ModifyStyle(WS_VISIBLE,WS_MINIMIZE,SWP_NOACTIVATE);
но при этом видно кнопку окна в TaskBar. Как полностью спрятать окно диалога оперируя из OnInitDialog (когда окно еще не нарисовано)
[Win32] Dialog window25.11.02 00:04 Автор: vim Статус: Незарегистрированный пользователь
> в функции OnInitDialog из реестра считывается прошлое > состояние окна приложения (Minimized/Maximized) и потом > соответсвенно либо показываю окно либо не показываю. > Не показываю таким образом: > if (!m_bIsForegroundWnd) > > this->ModifyStyle(WS_VISIBLE,WS_MINIMIZE,SWP_NOACTIVATE) > ; > но при этом видно кнопку окна в TaskBar. Как полностью > спрятать окно диалога оперируя из OnInitDialog (когда окно > еще не нарисовано)
Я делал это так:
// Constructor
CDriver5GuiDlg::CDriver5GuiDlg(CWnd* pParent =NULL)
: CDialog(CDriver5GuiDlg::IDD, pParent), m_tray(IDR_TRAY_PICT_OFF,Driver)
{
//{{AFX_DATA_INIT(CDriver5GuiDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// Creating modeless (not modal) dialog box window
// (doesn't need for modal dialog box)
CDialog::Create(IDD_DRIVER5GUI_DIALOG,NULL);
}
> ShowWindow(SW_HIDE); > > можно поставить стиль toolwindow, тогда вообще никогда не > будет кнопки в таскбаре вот как раз > ShowWindow(SW_HIDE); это и будет автогеном удалять аппендицит как у Вас в России
это просто такой анекдот есть22.11.02 17:37 Автор: ggg <ggg> Статус: Elderman
> кстати > >> > this->ModifyStyle(WS_VISIBLE,WS_MINIMIZE,SWP_NOACTIVATE) > ; > this-> здесь не нужен > > и ещё: > у mfc отстойное описание > большинство функций mfc имеют аналоги в winapi > winapi лучше документировано хоть это и выглядит, как самовосхваление, но тем не менее я решил запостить этот тред лишь после ночи поисков и экспериментов. И ModifyStyle - это примитивная реализация SetWindowPos, но тем не менее ни черта у меня не выходит. Я просто заставляю окно стартовать минимизированным - на TaskBar кнопка все равно появляется. Что то посоветуешь может быть?
а разве ShowWindow(SW_HIDE) не работает?22.11.02 23:00 Автор: ggg <ggg> Статус: Elderman
> а если создаёшь диалог через Create(), то можно просто в > ресурсах диалога убрать стиль WS_VISIBLE мне нужно в процессе обработки WM_INITDIALOG в зависимости от предыдущей сессии либо показывать окно нормальным образом, либо показывать только иконку в Tray . Я уже пробовал и стиль WS_VISIBLE убирать и WS_MINIMIZE ставил - окно просто стартует в минимизированном виде (при этом рисуется кнопка окна на TaskBar )черт его дери. А нужно, чтобы кнопка эта не рисовалась вообще.
как я понял ты через DoModal его создаёшь
тогда в InitDialog бесполезно его прятать, т.к. винда его сама показывает после этого сообщения
можно сделать PostMessage, а там уже спрятать любой функцией
[Win32] а как не дать винде отобразить окно23.11.02 23:11 Автор: beetle <beetle> Статус: Member
> как я понял ты через DoModal его создаёшь > тогда в InitDialog бесполезно его прятать, т.к. винда его > сама показывает после этого сообщения > можно сделать PostMessage, а там уже спрятать любой > функцией тогда создается еффект мерцания на экране - это неприятно
как заставить Windows не отображать окно вообще?
[Win32] а как не дать винде отобразить окно23.11.02 23:40 Автор: ggg <ggg> Статус: Elderman
через DoModal если и можно, то какими-нибудь извращениями
я не знаю как
если создавать диалог через Create() и не указать WS_VISIBLE в ресурсах, то диалога не будет видно
я давно не писал на mfc
там кажется ещё в InitInstance() нужно TRUE возвращать для Create()
Нет, однако — это реализация функции API SetWindowLong ;-) Плюс, посмотри функцию Get\SetWindowPlacement, может подойдёт тебе.22.11.02 22:05 Автор: HandleX <Александр М.> Статус: The Elderman