Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с диалогами, исходник 
:(
    Опции темы
Alexey_2007
Дата 1.2.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: 1
Всего: 1



Если у кого-нибудь есть пример работы с диалогами именно в WinAPI - скиньте пожайлуста.

Сложность в том, что в примере должно быть много разный кнопочек, переключателей и т.д.... в общем как в любой уважающей себя нормальной программе под Windows.

Я уверен что каждый программист пару раз делал что-то где нужны диалоги...

Вы поймите - я тоже писал их уже, но сам исходник давно потерся, а занова писать работы с диалогами(лично для меня) - очень долго т.к я в ней мало что знаю.... 
--------------------
Святая простота
PM MAIL   Вверх
Alexey_2007
Дата 1.2.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: 1
Всего: 1



Или хотя бы с простым диалогом дайте исходник! Неужели жалко?
--------------------
Святая простота
PM MAIL   Вверх
papam
Дата 1.2.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 1
Всего: 4



Вот окно с одной кнопкой
Код

#include <windows.h>

LRESULT CALLBACK MainWinProc(HWND,UINT,WPARAM,LPARAM);
#define ID_MYBUTTON 1    /* идентификатор для кнопочки внутри главного окна */

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int ss) {
 /* создаем и регистрируем класс главного окна */
 WNDCLASS wc;
 wc.style=0;
 wc.lpfnWndProc=MainWinProc;
 wc.cbClsExtra=wc.cbWndExtra=0;
 wc.hInstance=hInst;
 wc.hIcon=NULL;
 wc.hCursor=NULL;
 wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
 wc.lpszMenuName=NULL;
 wc.lpszClassName="Example 4 MainWnd Class";
 if (!RegisterClass(&wc)) return FALSE;

 /* создаем главное окно и отображаем его */
 HWND hMainWnd=CreateWindow("Example 4 MainWnd Class","EXAMPLE 4",WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL);
 if (!hMainWnd) return FALSE;
 ShowWindow(hMainWnd,ss);
 UpdateWindow(hMainWnd);

 MSG msg; /* цикл обработки событий */
 while (GetMessage(&msg,NULL,0,0)) {
  TranslateMessage(&msg); 
  DispatchMessage(&msg); 
 } 
 return msg.wParam; 
}

/* процедура обработки сообщений для главного окна */
LRESULT CALLBACK MainWinProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) {
 switch (msg) {
  case WM_CREATE:
   /* при создании окна внедряем в него кнопочку */
   CreateWindow("button","My button",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
    5,5,100,20,hw,(HMENU)ID_MYBUTTON,NULL,NULL);
     return 0;
  case WM_COMMAND:
   /* нажата наша кнопочка? */
   if ((HIWORD(wp)==0) && (LOWORD(wp)==ID_MYBUTTON)) 
    MessageBox(hw,"You pressed my button","MessageBox",MB_OK|MB_ICONWARNING);
   return 0;
  case WM_DESTROY:
   /* пользователь закрыл окно, программа может завершаться */
   PostQuitMessage(0);
   return 0;
 }
 return DefWindowProc(hw,msg,wp,lp);
}


--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Alexey_2007
Дата 1.2.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: 1
Всего: 1



Спасибоsmile

Но я имел ввиду работу именно с диалогами, а не с окнами

Это сообщение отредактировал(а) Alexey_2007 - 1.2.2007, 22:50
--------------------
Святая простота
PM MAIL   Вверх
papam
Дата 2.2.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 1
Всего: 4



Посмотри это :
Код

#include "example5.h"

BOOL CALLBACK MainProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE hThisInstance;
char filename[MAX_PATH]=""; /*буфер имени файла*/ 

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int) 
{
        hThisInstance=hInst;
        InitCommonControls();
        HWND hMainWnd=CreateDialog(hInst,"Ex5_Dlg",NULL,(DLGPROC)MainProc);
        if (!hMainWnd) return FALSE;
        MSG msg;                  
        while (GetMessage(&msg,NULL,0,0))
  {
      if (!IsDialogMessage(hMainWnd,&msg)) 
  {
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
  }
 }
 return msg.wParam; 
}

/* диалоговая процедура */
BOOL CALLBACK MainProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp)
 {
 static DWORD OldIcon=0;    /* id старой иконки диалога */
 static OPENFILENAME of;
 char* buf;
 HANDLE hf; 
 DWORD len,len1;
 switch (msg) 
{
  case WM_INITDIALOG:       
   OldIcon=SetClassLong(hw,GCL_HICON,(long)LoadIcon(hThisInstance,"Ex5_Icon"));
   return TRUE;
  case WM_COMMAND:
   switch (LOWORD(wp)) 
{
    case IDCANCEL:          
    case IDC_EXIT:          
     DestroyWindow(hw);
     break;
    case IDC_OPEN:          
     of.lStructSize=OPENFILENAME_SIZE_VERSION_400A;
     of.hwndOwner=hw;
     of.lpstrFilter="All files (*.*)\0*.*\0";
     of.lpstrCustomFilter=NULL; of.nMaxCustFilter=0;
     of.nFilterIndex=1;
     of.lpstrFile=filename; of.nMaxFile=MAX_PATH;
     of.lpstrFileTitle=NULL; of.nMaxFileTitle=0;
     of.lpstrInitialDir=NULL;
     of.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
     if (!GetOpenFileName(&of)) break;
     SetDlgItemText(hw,ID_STATUS,filename);
     hf=CreateFile(filename,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
     if (hf==INVALID_HANDLE_VALUE) {
      MessageBox(hw,"Open failed","Error",MB_ICONHAND|MB_OK);
      break;
     }
     len=GetFileSize(hf,NULL);
     buf=(char*)malloc(len+1); 
     if (!buf) {
      MessageBox(hw,"Mem alloc failed","Error",MB_ICONHAND|MB_OK);
      break;
     }
     ReadFile(hf,buf,len,&len1,NULL);
     buf[len1]=0;
     CloseHandle(hf);
     SetDlgItemText(hw,ID_EDIT,buf);
     free(buf);
     break;
    case IDC_SAVEAS:        
     of.lStructSize=OPENFILENAME_SIZE_VERSION_400A;
     of.hwndOwner=hw;
     of.lpstrFilter="All files (*.*)\0*.*\0";
     of.lpstrCustomFilter=NULL; of.nMaxCustFilter=0;
     of.nFilterIndex=1;
     of.lpstrFile=filename; of.nMaxFile=MAX_PATH;
     of.lpstrFileTitle=NULL; of.nMaxFileTitle=0;
     of.lpstrInitialDir=NULL;
     of.Flags=OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
     if (!GetSaveFileName(&of)) break;
    case IDC_SAVE:         
     if (lstrlen(filename)==0) 
{
   
      PostMessage(hw,WM_COMMAND,IDC_SAVEAS,lp);
      break;
 }
     SetDlgItemText(hw,ID_STATUS,filename);
     /* сохраняем файл */
     hf=CreateFile(filename,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
     if (hf==INVALID_HANDLE_VALUE) {
      MessageBox(hw,"Save failed","Error",MB_ICONHAND|MB_OK);
      break;
     }
     len=SendDlgItemMessage(hw,ID_EDIT,WM_GETTEXTLENGTH,0,0);
     buf=(char*)malloc(len+1); /* доп. байт под символ-терминатор (0) */
     GetDlgItemText(hw,ID_EDIT,buf,len+1);
     if (!buf) {
      MessageBox(hw,"Mem alloc failed","Error",MB_ICONHAND|MB_OK);
      break;
     }
     WriteFile(hf,buf,len,&len1,NULL);
     CloseHandle(hf);
     free(buf);
     break;
    case IDC_ABOUT:        
     MessageBox(hw,"Example N5 from http://dims.karelia.ru/win32","About",MB_OK|MB_ICONINFORMATION);
     break;
   }
   return TRUE;
  case WM_DESTROY:          
   SetClassLong(hw,GCL_HICON,(long)OldIcon);
   PostQuitMessage(0);
   return TRUE;
 }
 return FALSE;
}

--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Alexey_2007
Дата 2.2.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: 1
Всего: 1



Спасибо, а можне еще res файл приложить?
--------------------
Святая простота
PM MAIL   Вверх
papam
Дата 2.2.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 1
Всего: 4



Файл example5.rc
Код

#include "example5.h"

Ex5_Icon ICON "myicon.ico"

Ex5_Menu MENU
{
 POPUP "&File"
 {
  MENUITEM "&Open...", IDC_OPEN
  MENUITEM "&Save", IDC_SAVE
  MENUITEM "Save &As...", IDC_SAVEAS
  MENUITEM SEPARATOR
  MENUITEM "&Exit\tAlt-F4", IDC_EXIT
 }
 POPUP "&Help"
 {
  MENUITEM "&About...", IDC_ABOUT
 }
}

Ex5_Dlg DIALOG 50,50,300,200
 STYLE WS_OVERLAPPED|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_VISIBLE
 MENU "Ex5_Menu"
 CAPTION "Example 5"
 FONT 10, "Arial"
{
 EDITTEXT ID_EDIT, 5, 5, 290, 180, ES_MULTILINE|ES_WANTRETURN|ES_AUTOHSCROLL|ES_AUTOVSCROLL
 CONTROL "", ID_STATUS, STATUSCLASSNAME, 0, 0, 0, 0, 0
}



Это сообщение отредактировал(а) papam - 2.2.2007, 11:35
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Alexey_2007
Дата 2.2.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: 1
Всего: 1



спасибо!
--------------------
Святая простота
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.