Интерфейс главного окна.
От: Аноним  
Дата: 02.08.04 05:56
Оценка:
Значит вопрос такой: Создание интерфейса гл. окна программы(тулбаров, строка сост.. и т.д) все это надо делать динамически т.е в самой программе вызовом функций и макросов или гл. окно можно создавать как диалог в ресурсах, так намного удобнее .
Re: Интерфейс главного окна.
От: Кодт Россия  
Дата: 02.08.04 07:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Значит вопрос такой: Создание интерфейса гл. окна программы(тулбаров, строка сост.. и т.д) все это надо делать динамически т.е в самой программе вызовом функций и макросов или гл. окно можно создавать как диалог в ресурсах, так намного удобнее .


Вопрос-то в чём? Да, можно и так, и этак. Да, с ресурсами удобнее.
Перекуём баги на фичи!
Re[2]: Интерфейс главного окна.
От: Аноним  
Дата: 02.08.04 07:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>Значит вопрос такой: Создание интерфейса гл. окна программы(тулбаров, строка сост.. и т.д) все это надо делать динамически т.е в самой программе вызовом функций и макросов или гл. окно можно создавать как диалог в ресурсах, так намного удобнее .


Вопрос в том как правильнее что-ли??? Просто в книгах везде даются примеры создания на лету.

К>Вопрос-то в чём? Да, можно и так, и этак. Да, с ресурсами удобнее.
Re[3]: Интерфейс главного окна.
От: Кодт Россия  
Дата: 02.08.04 07:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос в том как правильнее что-ли??? Просто в книгах везде даются примеры создания на лету.


В книгах по интегрированным средам разработки — VC, BCB — скорее всего, есть примеры с ресурсами

А в книгах по чистому апи... Фишка в том, что создание на лету — гораздо более увлекательно и содержит кучу возможностей и граблей, которых нет при работе с ресурсами. Поэтому авторы делят своё и твоё внимание в сильно неравной пропорции.

К тому же, копание в ресурсах руками — утомительно. Лучше это делать в интегрированной среде (что является оффтопиком для книги по винапи).
Перекуём баги на фичи!
Re[4]: Интерфейс главного окна.
От: Аноним  
Дата: 02.08.04 08:10
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>Вопрос в том как правильнее что-ли??? Просто в книгах везде даются примеры создания на лету.


К>В книгах по интегрированным средам разработки — VC, BCB — скорее всего, есть примеры с ресурсами


К>А в книгах по чистому апи... Фишка в том, что создание на лету — гораздо более увлекательно и содержит кучу возможностей и граблей, которых нет при работе с ресурсами. Поэтому авторы делят своё и твоё внимание в сильно неравной пропорции.


К>К тому же, копание в ресурсах руками — утомительно. Лучше это делать в интегрированной среде (что является оффтопиком для книги по винапи).


Тогда такой вопрос: Кто как делает и почему???
Re[4]: Интерфейс главного окна.
От: Аноним  
Дата: 02.08.04 08:14
Оценка:
я другой аноним
но не подскажите как интерфейс главного окна(диалог) грузануть из dll-ки ?
особенно интересует вопрос о том, как вызвать диалоговую процедуру
без подвешивания всей программы, если она в dll -ке
P.S. все чистое winapi без mfc
thanks
Re[5]: Интерфейс главного окна.
От: Кодт Россия  
Дата: 02.08.04 08:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>я другой аноним


Зарегистрируйся, э?

А>но не подскажите как интерфейс главного окна(диалог) грузануть из dll-ки ?

А>особенно интересует вопрос о том, как вызвать диалоговую процедуру
А>без подвешивания всей программы, если она в dll -ке
А>P.S. все чистое winapi без mfc

Диалоговую процедуру вызывает виндоуз, её вручную звать не надо!
HMODULE hdll = LoadLibrary("your.dll");
DLGPROC proc = (DLGPROC)GetProcAddress(hdll, "YourDialogProc");

// модальный
INT code = DialogBoxParam(hdll, MAKEINTRESOURCE(IDD_YOURDIALOG), NULL, proc, NULL);

// немодальный
HWND hdlg = CreateDialogParam(hdll, MAKEINTRESOURCE(IDD_YOURDIALOG), NULL, proc, NULL);
/* прокачка сообщений и всё такое */

А вообще, лучше, чтобы сама длл создавала свои диалоги:
HMODULE hdll = LoadLibrary("your.dll");

// модальный
typedef INT  (*PFN_CallYourDialog)(LPVOID param);
PFN_CallYourDialog func = (PFN_CallYourDialog)GetProcAddress(hdll, "CallYourDialog");
INT code = (*PFN_CallYourDialog)(NULL);

// немодальный
typedef HWND (*PFN_CreateYourDialog)(LPVOID param);
PFN_CreateYourDialog func = (PFN_CreateYourDialog)GetProcAddress(hdll, "CreateYourDialog");
HWND hdlg = (*PFN_CreateYourDialog)(NULL);
Перекуём баги на фичи!
Re[5]: Интерфейс главного окна.
От: jazzer Россия Skype: enerjazzer
Дата: 02.08.04 08:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тогда такой вопрос: Кто как делает и почему???


Все должно быть в ресурсах или аналогичных хранилищах.
Тогда мы бесплатно получаем кучу возможностей, например, безболезненный перевод интерфейса на другие языки
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: Интерфейс главного окна.
От: win_lin Россия  
Дата: 02.08.04 12:17
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>я другой аноним


К>Зарегистрируйся, э?


уговорил


вот dll-ка

#include "mDialog.h" 
#include "resource.h" 


HWND hwnd; 
HINSTANCE hLib; 

int WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved) 
    { 
      hLib=hInstance; 
        return(TRUE); 
    } 

EXPORT int LoadMainDialog(HWND hwnd) 
    { 
      return (DialogBox(hLib,MAKEINTRESOURCE(IDD_MAINFORMVIEW),hwnd,(DLGPROC)DlgProcMain)); 
    } 

BOOL CALLBACK DlgProcMain(HWND hDlg,UINT iMsg,WPARAM wParam,LPARAM lParam) 
    { 
          switch(iMsg) 
         { 
            case WM_INITDIALOG: 
               return(TRUE); 
            case WM_COMMAND: 
               switch(LOWORD(wParam)) 
                  { 
                     case IDC_BUTTON1: 
                        MessageBox(hDlg,"a","a",MB_OK); 
                        return(TRUE); 
                     case IDC_BUTTON2: 
                        MessageBox(hDlg,"b","b",MB_OK); 
                        return(TRUE); 
                  } 
         } 
      return(FALSE); 
   }



а вот приложение


#include <windows.h> 
#include "mDialog.h" 
#include "resource.h" 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 

HWND hwnd; 
HWND hDlg; 
HINSTANCE hInst; 
HINSTANCE hLib; 

typedef HWND (*mainDlg)(HWND); 

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) 
   { 
      static char szAppName[]="soft"; 
      MSG msg; 
      WNDCLASSEX wndclass; 
      mainDlg mDlg; 
      ... 
      hwnd=CreateWindow(szAppName,"Soft",WS_OVERLAPPED,CW_USEDEFAULT,CW_USEDEFAULT, 
         CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); 
      hInst=hInstance; 

      hLib=LoadLibrary("mDialog.dll"); 
      if (hLib!=NULL) 
         { 
            mDlg=(mainDlg)GetProcAddress(hLib,"LoadMainDialog"); 
            if (mDlg!=NULL) 
               hDlg=((mDlg)(hwnd)); 
      
         } 
      else 
         { 
            MessageBox(NULL,"error","error",MB_OK); 
         } 

      ShowWindow(hwnd,iCmdShow); 
      UpdateWindow(hwnd); 
      ... 
      return(msg.wParam); 
   } 

LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) 
   { 
      ... 
      switch (iMsg) 
         { 
            case WM_CREATE: 
               cx=GetSystemMetrics(SM_CXSCREEN); 
               cy=GetSystemMetrics(SM_CYSCREEN); 
                ... 
}



проблема — вешаю прогу и не пойму почему
спасибо
Re[7]: Интерфейс главного окна.
От: win_lin Россия  
Дата: 03.08.04 03:33
Оценка:
вроде у меня все как советовали
Re[6]: Интерфейс главного окна.
От: win_lin Россия  
Дата: 03.08.04 11:31
Оценка:
в чем ошибаюсь ?
Re[7]: Интерфейс главного окна.
От: Кодт Россия  
Дата: 05.08.04 19:56
Оценка:
Здравствуйте, win_lin, Вы писали:

_>вот dll-ка

_>

_>#include "mDialog.h" 
_>#include "resource.h" 

_>HWND hwnd; // а это зачем???
_>HINSTANCE hLib; 

_>int WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved) 
_>    { 
_>      hLib=hInstance; 
_>        return(TRUE); 
_>    } 

_>EXPORT int LoadMainDialog(HWND hwnd)
_>    { 
        // функция вызывает модальный диалог и по его завершению - возвращает код кнопки (напр. IDOK)
_>      return (DialogBox(hLib,MAKEINTRESOURCE(IDD_MAINFORMVIEW),hwnd,(DLGPROC)DlgProcMain)); 
_>    } 

_>BOOL CALLBACK DlgProcMain(HWND hDlg,UINT iMsg,WPARAM wParam,LPARAM lParam) 
_>    { 
_>          switch(iMsg) 
_>         { 
_>            case WM_INITDIALOG: 
_>               return(TRUE); 
_>            case WM_COMMAND: 
_>               switch(LOWORD(wParam)) 
_>                  { 
_>                     case IDC_BUTTON1: 
_>                        MessageBox(hDlg,"a","a",MB_OK); 
_>                        return(TRUE); 
_>                     case IDC_BUTTON2: 
_>                        MessageBox(hDlg,"b","b",MB_OK); 
_>                        return(TRUE); 
                // поскольку никогда не вызывается EndDialog(), то он будет висеть вечно
                      case IDOK: // по кнопке OK (если есть таковая)
                          EndDialog(IDOK); // сообщим системе, что всё, приплыли
                          return(TRUE);
_>                  } 
_>         } 
_>      return(FALSE); 
_>   } 

_>



_>а вот приложение


_>

_>#include <windows.h> 
_>#include "mDialog.h" 
_>#include "resource.h" 

_>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 

_>HWND hwnd; 
_>HWND hDlg; 
_>HINSTANCE hInst; 
_>HINSTANCE hLib; 

_>typedef HWND (*mainDlg)(HWND); 

_>int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) 
_>   { 
_>      static char szAppName[]="soft"; 
_>      MSG msg; 
_>      WNDCLASSEX wndclass; 
_>      mainDlg mDlg; 
_>      ... 
_>      hwnd=CreateWindow(szAppName,"Soft",WS_OVERLAPPED,CW_USEDEFAULT,CW_USEDEFAULT, 
_>         CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); 
_>      hInst=hInstance; 

_>      hLib=LoadLibrary("mDialog.dll"); 
_>      if (hLib!=NULL) 
_>         { 
_>            mDlg=(mainDlg)GetProcAddress(hLib,"LoadMainDialog"); 
_>            if (mDlg!=NULL) 
_>               hDlg=((mDlg)(hwnd)); // фигня, однако! Твоя функция УЖЕ показала и закрыла диалог
      
_>         } 
_>      else 
_>         { 
_>            MessageBox(NULL,"error","error",MB_OK); 
_>         } 

_>      ShowWindow(hwnd,iCmdShow); 
_>      UpdateWindow(hwnd); 
_>      ... 
_>      return(msg.wParam); 
_>   } 

_>LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) 
_>   { 
_>      ... 
_>      switch (iMsg) 
_>         { 
_>            case WM_CREATE: 
_>               cx=GetSystemMetrics(SM_CXSCREEN); 
_>               cy=GetSystemMetrics(SM_CYSCREEN); 
_>                ... 
_>} 
  

_>
... << RSDN@Home 1.1.2 stable >>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.