Okna modalne w dll'u


(Kjanok) #1

witam, ostatnio miałem wiele problemów w kwestii plików dll i okien modalnych, co do których pytania również zamieszczałem na tym forum.

Tym razem chciałbym wrzucić okno modalne do biblioteki dll :slight_smile: początkowo próbowałem to zrobić normalnie, poprzez wrzucenie okna do zasobów biblioteki i wyświetlenie go za pomocą DialogBox. Jednak okno się nie wyświetlało... pomyślałem więc, że może wstawię do tego dll'a najzwyklejsze okienko, jakie się tworzy w każdym programie wykożystującym winapi. Niestety i ono nie chciało się w żaden sposób wyświetlić...

Kod pliku wygląda następująco

#include 

#include "dll.h"

#include 

using namespace std;

LRESULT CALLBACK ProceduraOkienka(HWND hwnd, UINT message, 

  WPARAM wParam, LPARAM lParam);

BOOL WINAPI DLLMain(HANDLE hModule,DWORD ul_readon_for_call, LPVOID lpReseved){

     MessageBox(0, "dll", "dll", MB_OK);

     return TRUE;

     }

DLLEXPORT int cezar(char plik[100], HINSTANCE hInstance, HWND uchwyt){

          MessageBox(uchwyt, plik, "funcja do algorytmu cezara", MB_OK);


          WNDCLASSEX mini = {0};


  mini.cbSize = sizeof(WNDCLASSEX);

  mini.style = CS_VREDRAW | CS_HREDRAW;

  mini.lpfnWndProc = ProceduraOkienka;

  mini.cbClsExtra = 0;

  mini.cbWndExtra = 0;

  mini.hInstance = hInstance;

  mini.hIcon = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);

  mini.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);

  mini.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);

  mini.lpszMenuName = 0;

  mini.lpszClassName = "Standardowe";

  mini.hIconSm = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);


  // rejestrujemya klase okna

  RegisterClassEx(&mini);


  // tworzymy okno

  HWND uchwytOkna = CreateWindowEx(

    0, // rozszerzony styl

    "Standardowe", // klasa okna

    "Cezar - Szczegóły", // tekst na belce 

    WS_POPUPWINDOW | WS_CHILD | WS_VISIBLE,

    100, // pozycja x okna

    60, // pozycja y okna 

    260, // szerokosc okna 

    120, // wysokosc okna

    0, // okno nadrzedne

    0, // uchwyt menu

    hInstance, // uchwyt aplikacji

    0); // wskaznik na dane

    ShowWindow(uchwytOkna, SW_NORMAL);

  UpdateWindow(uchwytOkna);

  MSG msg = {0};

  for(;;)

  {

    if(GetMessage(&msg, 0, 0, 0) != 0)

    {

      TranslateMessage(&msg);

      DispatchMessage(&msg);

    }

    if(msg.message == WM_QUIT) break;

  }


  return (int)msg.wParam;

          }

LRESULT CALLBACK ProceduraOkienka(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)

{

 switch(Msg)

 {

  case WM_COMMAND:

  {

   //reakcja na przyciski

   switch(LOWORD(wParam))

   {

   }

  }

  break;

  default: return FALSE;

 }

 return TRUE;

}

Jak zwykle jestem otwarty na wszelkie propozycje :slight_smile:


(Fiołek) #2

Jeśli podajesz instancje DLL-a to nie ma możliwości by wyświetliło się okno. Musi to być instancja aplikacji.