Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339

Save As Dialog Box Customization

22.04.2014, 14:38. Показов 1523. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день, вопрос на картинке, мне нужно сделать неактивным поле ввода имени файла

собственно естественным образом направился искать в справочнике майкрософт, и нарыл что-то по теме..
http://msdn.microsoft.com/en-u... dentifiers

переводим гуглом .. и вот что находим

Идентификаторы являются константы, определенные в Dlgs.h и Winuser.h.

Идентификаторы управления :

cmb13 Выпадающий список, который отображает имя текущего файла, позволяет пользователю ввести имя файла, чтобы открыть, и выбрать файл, который был открыт или сохранен в последнее время. Это для более ранних Проводника совместимых приложений без крючка или шаблона диалогового. Сравните с edt1 .
edt1 Редактировать элемент управления, отображающий имя текущего файла или позволяет пользователю ввести имя открываемого файла. Сравните с cmb13 .

а теперь вопрос: что делать с этим edt1 чтобы получить желаемый результат
Миниатюры
Save As Dialog Box Customization  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2014, 14:38
Ответы с готовыми решениями:

про Save As\Open file dialog
вопрос в следующем, как зарегистрировать функцию обработчик данного окна (стандартный диалог Save as) , т.е. как ее привязать к самому...

Как работать с шаблоном dialog box?
есть такая нотация для dialog box: DLG_SCRNSAVECONFIGURE DIALOG 6, 18, 160, 63 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL STYLE...

Save Dialog
Всем привет! Подскажите, нужно вызывать стандартный Save Dialog из Lotusscript Снова туплю. Удалите тему плиз

6
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
23.04.2014, 09:39  [ТС]
нашел команду даже
BOOL Edit_Enable(
HWND hwndCtl,
BOOL fEnable
);

Но откуда мне знать дескриптор edit окна Save As Dialog ?

Добавлено через 18 часов 40 минут
может быть есть какие-то соображения? очень бы хотелось услышать, хотя бы в каком направлении копать
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.04.2014, 00:21
Ну вот соображения, правда стоит ли оно того? Сначала как обычно: находишь это окно и затем доходишь в нем до комбобокса c эдитом - FindWindow, FindWindowEx; затем ShowWindow с флагом SW_HIDE. Думаю, что делать это надо в отдельном потоке, а иначе никак. Усёк?
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
24.04.2014, 10:51  [ТС]
т.е. нахожу главное окно(FindWindow) , далее через FindWindowEx могу найти дочернее окно, но у этого окна много дочерних окон, т.е. я должен перебрать их как-то и найти нужный мне комбобокс с эдитом? если да, то по какому признаку мне опознать этот комбобокс?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
25.04.2014, 03:12
Лучший ответ Сообщение было отмечено NickoTin как решение

Решение

Ну вот, взял нахрапом. Через ф-ции что-то не совсем выходит, до EditBox'а не могу добраться.
Цитата Сообщение от bazelbodayFaron
по какому признаку мне опознать этот комбобокс?
Не знаешь по какому признаку опознать? У твоей Студии в меню Tools должен быть пункт Spy++, вот им и пользуйся на скорую руку. Можно попробовать через EnumWindows это все повторить, но мне уже лень. И еще, я оговорился выше, надо не ShowWindow в данном случае, а EnableWindow с флагом FALSE.

Тыц.
Миниатюры
Save As Dialog Box Customization  
1
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
25.04.2014, 16:48  [ТС]
и еще вопросик, взял пример кода окна с учебника, код компилируется окно не рисуется..по идее я просто заполняю структуру OPENFILENAME и кидаю ее указатель в функцию.. но что-то не выходит. код вроде не сложный, но окно не хочет появляться..

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// SaveASDialog.cpp : Defines the entry point for the application.
//
 
#include "stdafx.h"
#include "SaveASDialog.h"
#include <windows.h>
#include <Commdlg.h>
#define CM_FILE_OPEN 1001
#define CM_FILE_SAVE 1002
#define CM_FILE_QUIT 1003 
#define MAX_LOADSTRING 100
 
 
 
 
BOOL RegClass(WNDPROC, LPCTSTR, UINT) ;
LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM) ;
HINSTANCE ghInstance ;
 
char szClass[] = "OpenSaveFile" ; 
char szTitle[] = " Opening and saving file" ;
 
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevinstance, LPSTR ipszCmdLine, int nCmdShow ) 
{
 
    MSG msg;
    HWND hwnd ; ghInstance= hInstance ;
    if (RegClass(WndProc, szClass,COLOR_WINDOW))
        return FALSE ;
    if (!(hwnd = CreateWindow(szClass,szTitle,WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,0,0, hInstance,NULL))) return FALSE ;
    while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);
    return msg.wParam ; 
}
BOOL RegClass (WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{ 
     WNDCLASS wc; wc.style = wc.cbClsExtra=wc.cbWndExtra=0 ;
     wc.lpfnWndProc=Proc ; wc.hInstance= ghInstance;
     wc.hIcon= LoadIcon (NULL, IDI_APPLICATION);
     wc.hCursor= LoadCursor (NULL,IDC_ARROW) ;
     wc.hbrBackground = (HBRUSH)(brBackground + 1);
     wc.lpszMenuName = (LPCTSTR) NULL ;
     wc.lpszClassName = szName; return (RegisterClass(&wc)!=0);
}
BOOL CreateMenuItem (HMENU hMenu, char *str, UINT uIns,UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)
{ 
    static MENUITEMINFO mii ; 
    mii.cbSize = sizeof (MENUITEMINFO) ;
    mii.fMask =MIIM_STATE|MIIM_TYPE|MIIM_SUBMENU|MIIM_ID ; 
    mii.fType = fType ; mii.fState =MFS_ENABLED ;
    mii.dwTypeData = str ;
    mii.cch = sizeof(str) ;mii.wID=uCom ; mii.hSubMenu = hSubMenu; 
    return InsertMenuItem(hMenu,uIns, flag,&mii);
  
 
 
}
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM IParam)
{
 static HMENU hMainMenu, hFileMenu ;
 static OPENFILENAME ofn ;
 static char szFile[256] ;
 static char szFileTitle[256];
 static char CustomFilter[256] ;
   switch (msg)
   { 
   case WM_CREATE:
       {  
           hMainMenu = CreateMenu( ) ;
           hFileMenu=CreatePopupMenu( ); int i=0 ;
           CreateMenuItem(hFileMenu,"&OPEN",i++,CM_FILE_OPEN,NULL,FALSE,MFT_STRING) ;
           CreateMenuItem(hFileMenu,"&SAVE",i++,CM_FILE_SAVE,NULL,FALSE,MFT_STRING) ;
           CreateMenuItem(hFileMenu,NULL,i++,0,NULL,FALSE, MFT_SEPARATOR) ;
           CreateMenuItem(hFileMenu,"&EXIT",i++,CM_FILE_QUIT,NULL,FALSE,MFT_STRING) ;
           i=0 ;
           CreateMenuItem(hMainMenu,"&File",i++,CM_FILE_QUIT, NULL, FALSE,MFT_STRING) ;
           SetMenu(hwnd,hMainMenu); DrawMenuBar(hwnd) ;
           
           ofn.lStructSize = sizeof(OPENFILENAME);
           ofn.hwndOwner  = hwnd ;
           ofn.nFilterIndex  = 1 ;
           ofn.lpstrFile = szFile ;
           ofn.nMaxFile = sizeof(szFile);
           ofn.lpstrFileTitle = szFileTitle ;
           ofn.nMaxFileTitle = sizeof(szFileTitle) ;
           ofn.lpstrCustomFilter = CustomFilter ;
           return 0 ;
}//конец WM_CREATE
 
   case WM_COMMAND :
{
    switch (LOWORD(wParam))
    {
    case CM_FILE_OPEN :
        {
            ofn.Flags = OFN_EXPLORER| OFN_CREATEPROMPT|OFN_ALLOWMULTISELECT;
            ofn.lpstrTitle =
                "Panel VIBORA IMENI OTKRIVAEMOGO FILE";
            char szFilter[256]= "FILE C++ I C\0*.cpp; *.c\0"
                "Zagolovochnie FILE\0*.h;*.hpp\0"
                "Vse files\0*.*\0" ;
            ofn.lpstrFilter=szFilter ;
            szFileTitle[0]='\0' ;
            szFile[0]='\0';
             char str[512];
            if (GetOpenFileName(&ofn))
            {
               
                strcpy(str,"SPISOK IMEN FILOV:\t");
                for (int i=0; i<255 ; i++)
                {
                     if (szFile[i]=='\0' &&
                         szFile[i+1]=='\0') break ;
                         if (szFile[i]=='\0') szFile[i]='\n' ;
                }
            
            strcat(str,szFile); 
            strcat(str,"\n\n Imya file bez ukazania puti:\t");
            strcat(str,szFileTitle);
            MessageBox(hwnd,str,"rezultati vibora imeni otkrivaemogo file",MB_OK);
        }// конец CM_FILE_OPEN
        return 0 ;
    }
   case CM_FILE_SAVE:
       { 
               ofn.Flags =OFN_OVERWRITEPROMPT ;
               ofn.lpstrTitle = "Panel vibora imeni dlya sohraneniya fila" ;
               char szFilter[256] = "Vse file\0*.*\0" ;
               ofn.lpstrFilter = szFilter ;
               szFile[0]='\0' ;
               if (GetSaveFileName(&ofn))
               {
                   char str[512] ;
                   strcpy(str,"Full Name of File: \t") ;
                   strcat(str,szFile);
                   strcat(str,"\n\n Name of File without root folder:\t") ;
                   strcat(str,szFileTitle);
                   MessageBox(hwnd,str,"Results of choosing name for saving file",MB_OK);
 
 
               } 
               return 0;
 
 
        }
       case CM_FILE_QUIT:
         { DestroyWindow(hwnd); return 0 ; }
     }
 return 0;
 
}//конец CALLBACK
 
   case CM_FILE_QUIT: 
       {PostQuitMessage(0); return 0 ; }
  }
     return DefWindowProc (hwnd, msg, wParam,IParam);
}
Добавлено через 4 часа 9 минут
короче говоря через spy++ нет смысла искать там всегда при перезапуске программы будет разный handle.
у диалога есть controls id: в данном случае edt1 и есть то что мне нужно
проблемс в том, что GetDlgItem(Hparent,edt1) не возвращает мне handle .

Добавлено через 2 часа 20 минут
разобрался как это сделать - через функцию GetWindow. взял другой проект туда засунул в обработчик кнопок заполенную структуру и вызвал функцию GetSaveFileName. окно вызывается, но как узнать его handle ? handle главного окна я знаю(у которого единственная кнопка по нажатию на которой вспылвает диалог), но диалог типа Save As не будет дочерним как я понял, т.к. дочерние окна это кнопки и т.д.
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
29.04.2014, 11:38  [ТС]
Ответ тут : Узнать hwnd Save As диалога и его детей
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2014, 11:38
Помогаю со студенческими работами здесь

Open,Save Dialog
Сап работяги. Не могу понять почему не работает код, в частности сохраняет пустые файлы в формате txt хотя информация введена в окно...

OpenDialog Save Dialog
Мне нужно, чтобы при нажатии на пункты MainMenu &quot;Открыть&quot; и &quot;Сохранить&quot;, соответственно, открывало и сохраняло форму. Может попробовать...

Сохранение через Save Dialog
Помогите разобраться с сохранением. Вот допустим я на форме создаю кнопку Button, в ней открываю файл, работаю с ним и закрываю, но на...

jfilechooser save dialog задать filename
собствено в этом и вопрос - как задать поле file name, а то у меня по умолчанию там пишет &quot;C:\my documents &quot;

Сбой софта на окнах Open/Save dialog
Всем привет. Периодически совершенно разные программы падают при открытии стандартного диалога открытия/сохранения файла. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru