Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2011, 19:53   #1
ARt44
 
Регистрация: 23.09.2010
Сообщений: 3
По умолчанию Создание дочернего окна

Необходимо создать приложение с дочерним окошком средствами WinApi. Я создал win32 приложение, а затем добавил туда код по регистрации и отрисовки дочернего окна. Однако функция CreateWindow не создает окошко. Подскажите в чем дело.
PHP код:
#include "stdafx.h"
#include "1.h"
 
#define MAX_LOADSTRING 100
 

HINSTANCE hInst;                                                         
TCHAR szTitle[MAX_LOADSTRING];                                  
TCHAR szWindowClass[MAX_LOADSTRING];                   
TCHAR szChildTitle[] = L"233";                                 
TCHAR szChildClass[] = L"657";                  
 

ATOM                            MyRegisterClass(HINSTANCE hInstance);
ATOM                            MyRegisterClass1(HINSTANCE hInstance);
BOOL                            InitInstance(HINSTANCEint);
LRESULT CALLBACK        WndProc(HWNDUINTWPARAMLPARAM);
LRESULT CALLBACK        ChildWndProc(HWNDUINTWPARAMLPARAM);
INT_PTR CALLBACK        About(HWNDUINTWPARAMLPARAM);
 
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     
HINSTANCE hPrevInstance,
                     
LPTSTR    lpCmdLine,
                     
int       nCmdShow)
{
        
UNREFERENCED_PARAMETER(hPrevInstance);
        
UNREFERENCED_PARAMETER(lpCmdLine);
 

        
MSG msg;
        
HACCEL hAccelTable;
 
   
        
LoadString(hInstanceIDS_APP_TITLEszTitleMAX_LOADSTRING);
        
LoadString(hInstanceIDC_MY1szWindowClassMAX_LOADSTRING);
        
MyRegisterClass(hInstance);
 
        
// Perform application initialization:
        
if (!InitInstance (hInstancenCmdShow))
        {
                return 
FALSE;
        }
 
        
hAccelTable LoadAccelerators(hInstanceMAKEINTRESOURCE(IDC_MY1));
 
        
        
// Main message loop:
        
while (GetMessage(&msgNULL00))
        {
                if (!
TranslateAccelerator(msg.hwndhAccelTable, &msg))
                {
                        
TranslateMessage(&msg);
                        
DispatchMessage(&msg);
                }
        }
 
        return (int) 
msg.wParam;
}
 
 
ATOM MyRegisterClass(HINSTANCE hInstance)
{
        
WNDCLASSEX wcex;
 
        
wcex.cbSize sizeof(WNDCLASSEX);
 
        
wcex.style                      CS_HREDRAW CS_VREDRAW;
        
wcex.lpfnWndProc        WndProc;
        
wcex.cbClsExtra         0;
        
wcex.cbWndExtra         0;
        
wcex.hInstance          hInstance;
        
wcex.hIcon                      LoadIcon(hInstanceMAKEINTRESOURCE(IDI_MY1));
        
wcex.hCursor            LoadCursor(NULLIDC_ARROW);
        
wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);
        
wcex.lpszMenuName       MAKEINTRESOURCE(IDC_MY1);
        
wcex.lpszClassName      szWindowClass;
        
wcex.hIconSm            LoadIcon(wcex.hInstanceMAKEINTRESOURCE(IDI_SMALL));
 
        return 
RegisterClassEx(&wcex);
}
ATOM MyRegisterClass1(HINSTANCE hInstance)
{
 
        
WNDCLASS wcex2;
 
        
memset(&wcex20sizeof(wcex2));
 
        
wcex2.style                     CS_HREDRAW CS_VREDRAW;
        
wcex2.lpfnWndProc       ChildWndProc;
        
wcex2.cbClsExtra                0;
        
wcex2.cbWndExtra                0;
        
wcex2.hInstance         hInstance;
        
wcex2.hIcon                     LoadIcon(hInstanceMAKEINTRESOURCE(IDI_MY1));
        
wcex2.hCursor           LoadCursor(NULLIDC_ARROW);
        
wcex2.hbrBackground     = (HBRUSH)(COLOR_WINDOW+1);
        
wcex2.lpszMenuName      NULL;
        
wcex2.lpszClassName     szChildClass;
        
//wcex2.hIconSm         = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
        
return RegisterClass(&wcex2);
}
 
 
BOOL InitInstance(HINSTANCE hInstanceint nCmdShow)
{
   
HWND hWndhChildWnd;
 
   
hInst hInstance// Store instance handle in our global variable
 
   
hWnd CreateWindow(szWindowClassszTitleWS_OVERLAPPEDWINDOW,
      
CW_USEDEFAULT0CW_USEDEFAULT0NULLNULLhInstanceNULL);
 
   if (!
hWnd)
   {
      return 
FALSE;
   }
 
   
ShowWindow(hWndnCmdShow);
   
UpdateWindow(hWnd);
 
   
hChildWnd CreateWindow(szChildClassszChildTitleWS_CHILDWINDOW,
      
CW_USEDEFAULT0CW_USEDEFAULT0hWndNULLhInstanceNULL);
 
   if(!
hChildWnd) {MessageBox(hChildWnd,L"Ошибка",L"Ошибка",MB_OK);}
 
   
ShowWindow(hChildWndSW_SHOW);
   
UpdateWindow(hChildWnd);
 
 
   return 
TRUE;

ARt44 вне форума Ответить с цитированием
Старый 25.09.2011, 11:07   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Стиль WS_VISIBLE поможет.
counter вне форума Ответить с цитированием
Старый 30.09.2011, 01:44   #3
_Troy
Я не простой
Пользователь
 
Аватар для _Troy
 
Регистрация: 29.09.2011
Сообщений: 77
По умолчанию

А разве дочерние окна не через CreateWindowEx создаются?
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения
_Troy вне форума Ответить с цитированием
Старый 30.09.2011, 13:41   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от _Troy Посмотреть сообщение
А разве дочерние окна не через CreateWindowEx создаются?
А вы разницу между CreateWindow и CreateWindowEx видите?
counter вне форума Ответить с цитированием
Старый 30.09.2011, 18:01   #5
_Troy
Я не простой
Пользователь
 
Аватар для _Troy
 
Регистрация: 29.09.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
А вы разницу между CreateWindow и CreateWindowEx видите?
Смотря для каких целей писать программу. По сути разницы нет.
Просто я доверяю Microsoft и часто пользуюсь их документацией, которая меня еще ни разу не подводила.

Вот что говорит msdn.com
This function creates an overlapped, pop-up, or child window with an extended style; otherwise, this function is identical to the CreateWindow function.

P.S. А потом кто-то жалуются почему некоторые программы пишут "кривые"
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения

Последний раз редактировалось _Troy; 30.09.2011 в 18:05.
_Troy вне форума Ответить с цитированием
Старый 30.09.2011, 22:48   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Ну а по поводу CreateWindow тот же MSDN пишет "This function creates an overlapped, pop-up, or child window."

И фразу ту вы не совсем, видимо, поняли. CreateWindowEx позволяет создать окно с расширенным стилем, а в остальном она идентична CreateWindow.

PS. И кто это жалуется?
counter вне форума Ответить с цитированием
Старый 01.10.2011, 00:50   #7
_Troy
Я не простой
Пользователь
 
Аватар для _Troy
 
Регистрация: 29.09.2011
Сообщений: 77
По умолчанию

Фразу-то я понял хорошо, потому и сказал вначале: "Смотря для чего..."
Да, не отрицаю, что идентичны, но не все окна "одинаковы" и не спроста есть эта функция.
Посему считаю что мы оба в какой-то степени правы. И можно считать это частным случаем.

P.S. Это образно говоря. Ведь на правильный код всегда приятней смотреть, да и от себя - не люблю когда тяп-ляп и готово...
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения
_Troy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как достучаться до дочернего окна? Aln070872 Общие вопросы Delphi 3 05.04.2011 22:19
Получить дескриптор дочернего окна Crudelis Win Api 1 15.10.2010 21:45
Создание дочернего окна на Win Api bulldog5293 Общие вопросы Delphi 6 26.09.2010 02:12
WM_KYEDOWN у дочернего окна. MSga Win Api 9 02.01.2010 18:09
Изменение данных дочернего окна damned20 Win Api 1 11.08.2009 13:04