Консультация № 188953
16.03.2016, 16:54
0.00 руб.
17.03.2016, 09:16
1 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:


Запускаю програму пишет готово, но окна не одкрываеться но есть в процесах. Что мне делать?

Вот код програми:

[code h=200]// Win32Project1.cpp: определяет точку входа для приложения.
//

#include "stdafx.h"
#include "Win32Project1.h"
#include <iostream>


LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
wchar_t cname[] = L"Class";
wchar_t title[] = L"Zavdannya 2";
MSG msg;

WNDCLASS wcex;

wcex.style = 0;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT1);
wcex.lpszClassName = cname;

if (!RegisterClass(&wcex)) return 0;

HWND hWnd = CreateWindow(cname, title, WS_OVERLAPPEDWINDOW , 0, 0, 1000, 500, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam)
{
HWND hComb;
const int item=99;
char ComboBoxItems[item];
switch(message)
{
case WM_CREATE:
CreateWindow(L"button", L"Perenos", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 10, 10, 150, 30, hWnd, (HMENU)1000, NULL, NULL);
CreateWindow(L"Edit", NULL, WS_EX_CLIENTEDGE|WS_BORDER|WS_CHILD|WS_VISIBLE, 180, 50, 100, 20, hWnd, NULL, NULL, NULL);
CreateWindow(L"ComboBox", NULL, WS_EX_CLIENTEDGE|WS_BORDER|WS_CHILD|WS_VISIBLE, 300, 80, 100, 50, hWnd, (HMENU)1001, NULL, NULL);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
break;
case WM_COMMAND:
{
if(LOWORD(wparam)==1000)
{
EndDialog(hWnd, NULL);
return TRUE;
}
}
case WM_INITDIALOG:
{
hComb = GetDlgItem(hWnd, 1001);
for (int i=1; i<=item; i++)
{
_itoa_s(i, ComboBoxItems,10);
SendMessage(hComb, CB_ADDSTRING,0,(LPARAM)ComboBoxItems);
}
SendMessage(hComb, CB_SETCURSEL,0,0);
SendDlgItemMessage(hWnd, 1001, CB_SETCURSEL, NULL, NULL);
}
}
return 0;
}
[/code]

Приложение:
// Win32Project1.cpp: определяет точку входа для приложения.
//

#include "stdafx.h"
#include "Win32Project1.h"
#include <iostream>


LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
wchar_t cname[] = L"Class";
wchar_t title[] = L"Zavdannya 2";
MSG msg;

WNDCLASS wcex;

wcex.style = 0;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT1);
wcex.lpszClassName = cname;

if (!RegisterClass(&wcex)) return 0;

HWND hWnd = CreateWindow(cname, title, WS_OVERLAPPEDWINDOW , 0, 0, 1000, 500, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam)
{
HWND hComb;
const int item=99;
char ComboBoxItems[item];
switch(message)
{
case WM_CREATE:
CreateWindow(L"button", L"Perenos", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 10, 10, 150, 30, hWnd, (HMENU)1000, NULL, NULL);
CreateWindow(L"Edit", NULL, WS_EX_CLIENTEDGE|WS_BORDER|WS_CHILD|WS_VISIBLE, 180, 50, 100, 20, hWnd, NULL, NULL, NULL);
CreateWindow(L"ComboBox", NULL, WS_EX_CLIENTEDGE|WS_BORDER|WS_CHILD|WS_VISIBLE, 300, 80, 100, 50, hWnd, (HMENU)1001, NULL, NULL);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
break;
case WM_COMMAND:
{
if(LOWORD(wparam)==1000)
{
EndDialog(hWnd, NULL);
return TRUE;
}
}
case WM_INITDIALOG:
{
hComb = GetDlgItem(hWnd, 1001);
for (int i=1; i<=item; i++)
{
_itoa_s(i, ComboBoxItems,10);
SendMessage(hComb, CB_ADDSTRING,0,(LPARAM)ComboBoxItems);
}
SendMessage(hComb, CB_SETCURSEL,0,0);
SendDlgItemMessage(hWnd, 1001, CB_SETCURSEL, NULL, NULL);
}
}
return 0;
}
Прикрепленные файлы:
4272f9be62787335f22caca42925752199d39d63.jpg

Обсуждение

давно
Профессор
230118
3054
16.03.2016, 17:37
общий
16.03.2016, 17:41
Адресаты:
Пользуетесь очень устаревшими методами. Такой код я помню в начале 90-х. Под виндоус сейчас используется .NET. По вопросу - чтобы появилось окно, должна вызываться функция ShowWindow. Проверьте значение параметра nCmdShow.
давно
Посетитель
7438
7205
17.03.2016, 20:44
общий
это ответ
Здравствуйте, r.shiba!
Вы забыли отправить отработку всех остальных сообщений в DefWindowProc

Код:

//....
case WM_INITDIALOG:
{

hComb = GetDlgItem(hWnd, 1001);
for (int i=1; i<=item; i++)
{
itoa(i, ComboBoxItems,10);
SendMessage(hComb, CB_ADDSTRING,0,(LPARAM)ComboBoxItems);
}
SendMessage(hComb, CB_SETCURSEL,0,0);
SendDlgItemMessage(hWnd, 1001, CB_SETCURSEL, NULL, NULL);
break;
}
default:
return( DefWindowProc( hWnd, message, wparam, lparam ) ) ;

}
return 0;
}
4
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
17.03.2016, 20:52
общий
Адресаты:
Асмик, на вкус и цвет товарища нет. По мне, так WinAPI всегда будет актуален.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа