Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Главное окно с уникальным классом, RES.RC: CLASS "..." 
V
    Опции темы
Gwendolen
Дата 19.9.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пожалуста помогите!!!
Нужно создать главное окно с уникальным классом для
FindWindow(DIALOG_UNICUM_CLASS, nil); из ресурса диалога.
Пока не вижу другого выхода как писать runtime окно, которое никогда не видно, а только обрабатывает сообщения. А окна с ресурсов делать дочрними.
Использую MinGW Developer Studio 2.05 ()
При приведенном ниже коде прога запускается, а окно не видно.
res.rc:
Код

1000 DIALOGEX 6,6,194,102
CAPTION "FORM"
CLASS "WWWWWESSFFFSF"
FONT 8,"MS Sans Serif"
STYLE 0x10CF0000
EXSTYLE 0x00000000
BEGIN
  CONTROL "BOTTON",1001,"Button",0x50010000,38,16,114,63,0x00000000
END


prj.cpp:
Код

#include <windows.h>

BOOL CALLBACK MainDlgProc( HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam )
  {
     switch( msg )
      {
         case WM_DESTROY :
             PostQuitMessage(0);
             return TRUE;
         break;
         case WM_SYSCOMMAND:
            if (wParam == SC_CLOSE)
              {
                 EndDialog(wnd, 0);
                 PostQuitMessage(0);
                 return TRUE;
              }
         break;
      }
     return FALSE;
  }

LRESULT CALLBACK WindowProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
  {
      switch( msg )
      {
         case WM_DESTROY :
             PostQuitMessage(0);
             return 1;
         break;     
      }    
      return DefWindowProc(wnd,msg,wParam,lParam);
  }    

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  {
     MSG msg;    
     HWND MainWnd;
     WNDCLASSEXA wc;
     
     wc.cbSize=sizeof(WNDCLASSEXA);
     wc.style=CS_HREDRAW or CS_VREDRAW;
     wc.lpfnWndProc=(WNDPROC)WindowProc;
     wc.cbClsExtra=0;
     wc.cbWndExtra=DLGWINDOWEXTRA;
     wc.hInstance=hInstance;
     wc.hIcon=LoadIcon(NULL, IDI_QUESTION);
     wc.hCursor=LoadCursor(NULL,IDC_ARROW);
     wc.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
     wc.lpszMenuName= NULL;
     wc.lpszClassName="WWWWWESSFFFSF";
     /**/
     RegisterClassEx(&wc);
     MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, NULL);
     ShowWindow(MainWnd, SW_SHOW );
     /*
     
     MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, MainDlgProc);
     ShowWindow(MainWnd, SW_SHOW );
     */
     
     
     while (GetMessage(&msg,0,0,0) )
        {
         if (MainWnd!=0)
            {
             if (IsDialogMessage(MainWnd, &msg))
               {continue;}
            }
         TranslateMessage(&msg);
         DispatchMessage(&msg);
        }
     return 0;
  }


А вот так работет, НО БЕЗ КЛАССА:
Код

---res.rc---
...
CAPTION "FORM"
/*
CLASS "WWWWWESSFFFSF"
*/
FONT 8,"MS Sans Serif"
...

---prj.cpp---
...
/*
     RegisterClassEx(&wc);
     MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, NULL);
     ShowWindow(MainWnd, SW_SHOW );
    */
     MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, MainDlgProc);
     ShowWindow(MainWnd, SW_SHOW );     
...


И что самое интересное этот код работает как надо (окно видно):

Код

program Project1;

{$R '..\res.res' '..\res.rc'}

uses
  windows,
  messages;

function WindowProc(wnd:HWND; Msg : UINT; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
 begin
   case msg of
     WM_DESTROY :
       begin
         PostQuitMessage(0);
       end;
   else
     Result:=DefWindowProcW(wnd,msg,wParam,lParam);
   end;
 end;

var
  wc:  tagWNDCLASSEXA;
  MainWnd: HWND;
  msg:  tagMSG;
begin

   wc.cbSize:=sizeof(tagWNDCLASSEXA);
   wc.style:=CS_HREDRAW or CS_VREDRAW;
   wc.lpfnWndProc:=@WindowProc;
   wc.cbClsExtra:=0;
   wc.cbWndExtra:=DLGWINDOWEXTRA;
   wc.hInstance:=HInstance;
   wc.hIcon:=LoadIcon(0, IDI_QUESTION);
   wc.hCursor:=LoadCursor(0,IDC_ARROW);
   wc.hbrBackground:=COLOR_BTNFACE+1;
   wc.lpszMenuName:= '';
   wc.lpszClassName:='WWWWWESSFFFSF';
   RegisterClassEx(wc);
   MainWnd:=CreateDialog(HInstance, MAKEINTRESOURCE(1000), 0, nil);
   ShowWindow(MainWnd, SW_SHOW );

  while GetMessage(msg,0,0,0) do
    begin
       if mainWnd<>0 then
         if IsDialogMessage(mainWnd,msg) then
           continue;
       TranslateMessage(msg);
       DispatchMessage(msg);
    end;
end.



--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
Gwendolen
Дата 19.9.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Даа...
Тему можно закрывать. А ведь 3 часа искал.
Раскопал только тогда когда заменил RegisterClassEx на RegisterClass и задумался...
Я никкогда не использовал wc.hIconSm паскалю это по барабану а С видно не нравится.
Вот так все супер!!!
wc.hIconSm= NULL;

Это сообщение отредактировал(а) Gwendolen - 19.9.2006, 22:21
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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