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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2011, 00:14   #1
RomanGorbunov
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 2
По умолчанию Проблема с созданием дочернего окна в WinApi в VS2005

Приветствую! Застрял с довольно идиотской проблемой. Необходимо создать приложение с дочерним окошком средствами WinApi. Я создал win32 приложение, а затем добавил туда код по регистрации и отрисовки дочернего окна. Однако функция CreateWindow не создает окошко.(специально добавил меседжбокс для проверки). Подскажите в чем дело.
Среда VS 2005.

Вот код:
Код:

// 1.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "1.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];					// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];			// the main window class name

TCHAR szChildTitle[] = L"233";					// The title bar text
TCHAR szChildClass[] = L"657";			// the main window class name

// Forward declarations of functions included in this code module:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK	ChildWndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: Place code here.
	MSG msg;
	HACCEL hAccelTable;

	// Initialize global strings
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_MY1, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// Perform application initialization:
	if (!InitInstance (hInstance, nCmdShow))
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY1));

	
	// Main message loop:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &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(hInstance, MAKEINTRESOURCE(IDI_MY1));
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_MY1);
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcex);

	WNDCLASS wcex2;

	memset(&wcex2, 0, sizeof(wcex2));

	wcex2.style			= CS_HREDRAW | CS_VREDRAW;
	wcex2.lpfnWndProc	= ChildWndProc;
	wcex2.cbClsExtra		= 0;
	wcex2.cbWndExtra		= 0;
	wcex2.hInstance		= hInstance;
	wcex2.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY1));
	wcex2.hCursor		= LoadCursor(NULL, IDC_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 hInstance, int nCmdShow)
{
   HWND hWnd, hChildWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   hChildWnd = CreateWindow(szChildClass, szChildTitle, WS_CHILDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hWnd, NULL, hInstance, NULL);

   if(!hChildWnd) {MessageBox(hChildWnd,L"Ошибка",L"Ошибка",MB_OK);}

   ShowWindow(hChildWnd, SW_SHOW);
   UpdateWindow(hChildWnd);


   return TRUE;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

LRESULT CALLBACK ChildWndProc(HWND hChildWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	//case WM_CREATE:{MessageBox(hChildWnd,"льрлд")} 	
	};
	return 0;
}

Последний раз редактировалось Stilet; 12.03.2011 в 08:24.
RomanGorbunov вне форума Ответить с цитированием
Старый 12.03.2011, 09:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Лучше бы не просто "ошибка" выводили,а GetLastError
p51x вне форума Ответить с цитированием
Старый 14.03.2011, 23:48   #3
RomanGorbunov
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 2
По умолчанию

А что делает это функция и как это может решит мою проблему?
RomanGorbunov вне форума Ответить с цитированием
Старый 15.03.2011, 19:44   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Мне процитировать МСДН?
p51x вне форума Ответить с цитированием
Старый 15.03.2011, 20:55   #5
skgwazap
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 40
По умолчанию

в процедуре MyRegisterClass после строки return RegisterClassEx(&wcex); ничего выполняться не будет, ибо return подразумевает break;
skgwazap вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с созданием окна в Win32 Magnuse Win Api 7 16.02.2011 16:13
Получить дескриптор дочернего окна Crudelis Win Api 1 15.10.2010 21:45
WM_KYEDOWN у дочернего окна. MSga Win Api 9 02.01.2010 18:09
API определение дочернего окна senia Win Api 6 25.12.2009 01:23
Проблема с созданием окна(CreateWindow) в отдельном потоке Sc0rp Win Api 4 26.03.2009 22:49