24 Апрель 2024, 13:21:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Новости
:
Начало
Помощь
Поиск
Войти
Регистрация
Русский Форум в Аргентине
>
Информационные технологии
>
Программирование
>
WinAPI
>
Вопрос по Visual Studio 2005
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вопрос по Visual Studio 2005 (Прочитано 16855 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BARBOSS
Постоялец
Бонус: +0/-0
Offline
Сообщений: 64
We Live In Peace
Вопрос по Visual Studio 2005
«
:
19 Август 2007, 18:36:46 »
Вот простой пример:
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox( NULL, "Follow the white rabbit...", "Matrix has you...", MB_OK );
return 0;
}
Компилятор ругается:
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [27]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
А если написать
MessageBoxA
- то все рульно компилиться!!! Посмотрел файл winuser.h и кажеться там что-то с Верией винды (#define "версия винды")Подскажите что нибудь!!!
С другими вызовами - то же самое!!!
«
Последнее редактирование: 21 Август 2007, 17:52:44 от BARBOSS
»
Записан
BARBOSS
Постоялец
Бонус: +0/-0
Offline
Сообщений: 64
We Live In Peace
Re: Вопрос по Visual Studio 2005
«
Ответ #1 :
21 Август 2007, 18:00:00 »
И ещё вопрос!!!!! :ab: При компиляции Заголовок окна отображаеться иероглифами!!! (пробовал компилировать в DEV-CPP все хорошо компилячиться). Кодовые страницы в реестре поменял -> NO_RESULT! :ai: Вот код:
[color=red
]#include <windows.h>
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
//=========================================================================================
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
HWND hMainWnd;
MSG msg;
char szClassName[ ] = "Class";
WNDCLASSEXA wc;//A
//Заполняем структуру класса окна
wc.cbSize = sizeof( wc );
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
wc.lpszMenuName = NULL; //AccessViolation without param
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
//Регистрируем класс окна
if ( !RegisterClassExA( &wc )) //A
{
MessageBoxA( NULL, "Cannot register class!", "Error", MB_OK );//A
return 0;
}
//Создаем основное окно приложения
hMainWnd = CreateWindowA( //A
szClassName, "API ", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
( HWND )NULL, ( HMENU )NULL,
( HINSTANCE )hInstance, NULL
);
if ( !hMainWnd )
{
MessageBoxA( NULL, "Cannot create main window", "Error", MB_OK );//A
return 0;
}
//Показываем наше окно
ShowWindow( hMainWnd, nCmdShow );
//UpdateWindow( hMainWnd );
//Выполняем цикл обработки сообщений до закрытия приложения
while ( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return msg.wParam;
}
//=========================================================================================
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch ( uMsg )
{
case WM_PAINT:
hDC = BeginPaint( hWnd, &ps );
GetClientRect( hWnd, &rect );
DrawTextA( hDC, "Месага", 1, &rect, //A
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint( hWnd, &ps );
break;
case WM_CLOSE:
DestroyWindow( hWnd );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
return 0;
}
[/color]
Да и насчет компилятора в 2005 студии - классная вещь - БЫСТРЫЙ и на релиз объем экзэшника в 3 раза меньше чем в DEV-cPP!
Записан
Ray
Старожил
Бонус: +3/-0
Offline
Сообщений: 495
Researcher
Re: Вопрос по Visual Studio 2005
«
Ответ #2 :
24 Август 2007, 16:42:58 »
По поводу того,что компилятор ругается:
Ты вызываешь не юникодную версию MessageBox.
Ты либо вызывай MessageBoxW и передавай строку в формате UNICODE,либо
MessageBoxA и строку в формате ANSI.
По поводу второго вопроса.
Вот это должно тебе помочь:
char szTitle[]="чего-то";
...
CreateWindow(szClassName,szTitle,...)
И еще WNDCLASS wc;
«
Последнее редактирование: 24 Август 2007, 16:45:03 от Leone
»
Записан
Одна голова - хорошо, а четыре руки быстрее!(с)
BARBOSS
Постоялец
Бонус: +0/-0
Offline
Сообщений: 64
We Live In Peace
Re: Вопрос по Visual Studio 2005
«
Ответ #3 :
24 Август 2007, 17:33:04 »
Цитата: Leone от 24 Август 2007, 16:42:58
По поводу того,что компилятор ругается:
Ты вызываешь не юникодную версию MessageBox.
Ты либо вызывай MessageBoxW и передавай строку в формате UNICODE,либо
MessageBoxA и строку в формате ANSI.
По поводу второго вопроса.
Вот это должно тебе помочь:
char szTitle[]="чего-то";
...
CreateWindow(szClassName,szTitle,...)
И еще WNDCLASS wc;
Спасибо от одной проблемы избавился (только пришлось WNDCLASSEX заменить на WNDCLASSA и LPCTSTR заменить просто на LPCSTR ) и отрезать пару параметров в коде они закоментированы), теперь вторая VC "сошел с ума"... Все равно заголовок окна пишет иероглифами вот файлы(исправленные и рабочие):
1. class.h
#include "class.h"
CLW::CLW( LPCSTR windowName, HINSTANCE hInst, int cmdShow,
LRESULT( WINAPI *pWndProc )( HWND, UINT, WPARAM, LPARAM ),
LPCSTR menuName, int x, int y, int width, int height,
UINT classStyle, DWORD windowStyle, HWND hParent )
{
char szClassName[ ] = "CLW";
//bc.cbSize = sizeof(bc);
bc.style = classStyle;
bc.lpfnWndProc = pWndProc;
bc.cbClsExtra = 0;
bc.cbWndExtra = 0;
bc.hInstance = hInst;
bc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
bc.hCursor = LoadCursor( NULL, IDC_ARROW );
bc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
bc.lpszMenuName = menuName;
bc.lpszClassName = szClassName;
// bc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
//Register window class
if ( !RegisterClassA(&bc) )
{
char msg[100] = "Cannot register class: ";
strcat( msg, szClassName );
MessageBoxA( NULL, msg, "Error", MB_OK );
return;
}
//Create window
hWnd = CreateWindowA( szClassName, windowName, windowStyle,
x, y, width, height, hParent, (HMENU)NULL, hInst, NULL);
if ( !hWnd )
{
char text[100] = "Cannot create window: ";
strcat( text, windowName );
MessageBoxA( NULL, text, "Error", MB_OK );
return;
}
//Show window
ShowWindow( hWnd, cmdShow );
}
//========================================================================
2. code_class.cpp
#include "class.h"
CLW::CLW( LPCSTR windowName, HINSTANCE hInst, int cmdShow,
LRESULT( WINAPI *pWndProc )( HWND, UINT, WPARAM, LPARAM ),
LPCSTR menuName, int x, int y, int width, int height,
UINT classStyle, DWORD windowStyle, HWND hParent )
{
char szClassName[ ] = "CLW";
//bc.cbSize = sizeof(bc);
bc.style = classStyle;
bc.lpfnWndProc = pWndProc;
bc.cbClsExtra = 0;
bc.cbWndExtra = 0;
bc.hInstance = hInst;
bc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
bc.hCursor = LoadCursor( NULL, IDC_ARROW );
bc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
bc.lpszMenuName = menuName;
bc.lpszClassName = szClassName;
// bc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
//Register window class
if ( !RegisterClassA(&bc) )
{
char msg[100] = "Cannot register class: ";
strcat( msg, szClassName );
MessageBoxA( NULL, msg, "Error", MB_OK );
return;
}
//Create window
hWnd = CreateWindowA( szClassName, windowName, windowStyle,
x, y, width, height, hParent, (HMENU)NULL, hInst, NULL);
if ( !hWnd )
{
char text[100] = "Cannot create window: ";
strcat( text, windowName );
MessageBoxA( NULL, text, "Error", MB_OK );
return;
}
//Show window
ShowWindow( hWnd, cmdShow );
}
//=========================================================================
3. code.cpp
#include <windows.h>
#include "class.h"
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
//=========================================================================================
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow )
{
MSG msg;
char szTitle[] = "API";
CLW mainWnd( szTitle, hInstance, nCmdShow, WndProc );
while ( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return msg.wParam;
}
//=========================================================================================
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
int userReply;
switch ( uMsg )
{
case WM_PAINT:
hDC = BeginPaint( hWnd, &ps );
GetClientRect( hWnd, &rect );
DrawTextA( hDC, "BLA-BLA-BLA", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint( hWnd, &ps );
break;
case WM_CLOSE:
userReply = MessageBoxA( hWnd, "А вы уверены?", "Выход", MB_YESNO | MB_ICONQUESTION );
if ( IDYES == userReply )
DestroyWindow( hWnd );
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
return 0;
}
Не ругайте меня, Я ведь всего лишь учусь...
Записан
Ray
Старожил
Бонус: +3/-0
Offline
Сообщений: 495
Researcher
Re: Вопрос по Visual Studio 2005
«
Ответ #4 :
27 Август 2007, 20:29:50 »
Что-то ты тут перемудрил...
Держи вот пример окна.
Компилячится нормально.
Цитировать
/*==========================================================================*/
#include <windows.h>
/*==========================================================================*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
HDC hDC;
switch (iMsg)
{
case WM_CREATE:
{
return 0;
}
case WM_PAINT:
{
hDC=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
DrawText(hDC,"Hello, Windows!",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hWnd,&ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd,iMsg,wParam,lParam);
}
/*==========================================================================*/
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
const char ClassName[]="Win32 class";
WNDCLASSEX WndClass;
HWND hWnd;
MSG Msg;
WndClass.cbSize = sizeof(WndClass);
WndClass.style = CS_HREDRAW|CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = ClassName;
WndClass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&WndClass);
hWnd=CreateWindow(ClassName, // Window class name
"The Hello Program", // Window caption
WS_OVERLAPPEDWINDOW, // Window style
CW_USEDEFAULT, // Initial x position
CW_USEDEFAULT, // Initial y position
CW_USEDEFAULT, // Initial x size
CW_USEDEFAULT, // Initial y size
NULL, // Parent window handle
NULL, // Window menu handle
hInstance, // Program instance handle
NULL); // Creation parameters
ShowWindow(hWnd,iCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return (int)Msg.wParam;
}
/*==========================================================================*/
Записан
Одна голова - хорошо, а четыре руки быстрее!(с)
spyplane
Советник
Старожил
Бонус: +0/-0
Offline
Сообщений: 267
Жмай те говорят!
Re: Вопрос по Visual Studio 2005
«
Ответ #5 :
11 Апрель 2008, 06:32:02 »
И кто придумал только эти кодировки..... былаб одна, бошая :)
Записан
Чукча не писатель, чукча читатель...
Ray
Старожил
Бонус: +3/-0
Offline
Сообщений: 495
Researcher
Re: Вопрос по Visual Studio 2005
«
Ответ #6 :
11 Апрель 2008, 10:16:46 »
Ну... можно использовать Unicode
Тогда можно будет и на китайском писать :ad:
Записан
Одна голова - хорошо, а четыре руки быстрее!(с)
spyplane
Советник
Старожил
Бонус: +0/-0
Offline
Сообщений: 267
Жмай те говорят!
Re: Вопрос по Visual Studio 2005
«
Ответ #7 :
11 Апрель 2008, 10:43:46 »
Цитата: Ray от 11 Апрель 2008, 10:16:46
Ну... можно использовать Unicode
Тогда можно будет и на китайском писать :ad:
это то ясно, что можно... но наплодили их, а теперь под unicode подгоняй сиди...
DC под линуксом делал:
Linux - UTF-8 локаль
DC-hub - UTF-8
WinDC - cp1251
windows - cp1251
Lunux dc - хоть одно настраивается нормально!
Компилим локаль, делаем рекоды.... а так был бы уникод один и все счастье!
Записан
Чукча не писатель, чукча читатель...
Ray
Старожил
Бонус: +3/-0
Offline
Сообщений: 495
Researcher
Re: Вопрос по Visual Studio 2005
«
Ответ #8 :
12 Апрель 2008, 03:11:18 »
Еще можно написать свой класс по работе с кодировками.
А потом применять его при необходимости в своих проектах.
Записан
Одна голова - хорошо, а четыре руки быстрее!(с)
spyplane
Советник
Старожил
Бонус: +0/-0
Offline
Сообщений: 267
Жмай те говорят!
Re: Вопрос по Visual Studio 2005
«
Ответ #9 :
12 Апрель 2008, 03:22:39 »
Цитата: Ray от 12 Апрель 2008, 03:11:18
Еще можно написать свой класс по работе с кодировками.
А потом применять его при необходимости в своих проектах.
Да обычно когда пишеш сам все, то с кодировками все ясно, а вот когда чужое настраиваешь....
Записан
Чукча не писатель, чукча читатель...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Foro en español
-----------------------------
=> Todas las Noticias
===> Noticias de Argentina
===> Crónicas Argentinas
===> Noticias del Mundo
-----------------------------
Аргентина
-----------------------------
=> Новости Аргентины
===> Новости
===> Закон и право в Аргентине
===> Туризм
=> Kультура Аргентины
===> Аргентинские истории
-----------------------------
Новости
-----------------------------
=> Латинская Америка
===> Эквадор
===> Венесуэлa
===> Колумбия
===> Бразилия
===> Панама
===> Мексика
===> Перу
===> Чили
===> Уругвай
===> Парагвай
===> Коста-Рика
===> Куба
===> Гваделупа
===> Никарагуа
===> Боливия
===> Доминиканская Республика
===> Русскоязычная Латинская Америка
===> Сальвадор
=> В мире
===> Политика
===> Новости
===> Новости стран СНГ
=> Криминальные новости
===> Криминальная хроника
===> Компромат • Факты • События
===> Калейдоскоп ужасов
=> Спорт
===> Спорт в Аргентине
=> Культура
===> Новости культуры
=> Погода
===> Прогноз погоды
=> Сенсации • Скандалы • Интриги
===> Скандалы • Неофициальные новости
-----------------------------
Иммиграция
-----------------------------
=> Иммиграция в Аргентину
===> Иммиграция в Аргентину
===> иммиграция в страны Латинской Америки
===> Информация об иммиграции
=> Иммиграция
===> Канада
===> Австралия
===> США
===> Европа
===> Canada • Quebec • Фотопутешествие
===> Новая Зеландия
===> Иммиграция в ЮАР
===> Информация об иммиграции
=> Туризм
===> Путеводитель по странам
===> Новости туризма
-----------------------------
Информационные технологии
-----------------------------
=> Железо
===> Компьютеры
===> Новости Hardware • Новости IT
=> Домены и сайты
===> Куплю
===> Продам
===> Обсуждение доменных имён
=> WEB разработки
===> PHP
===> ASP
===> JavaScript
===> HTML • CSS • XML
===> Базы Данных
===> Создание сайта • Раскрутка сайта
=> Программирование
===> C/C++
===> .NET
===> WinAPI
=> Мобильные устройства
===> Обзор мобильных телефонов
=> Операционные Системы
===> Linux
=====> Linux вопросы и ответы
=====> Дистрибутивы Linux
=====> Новости из мира Linux
===> Mac OS
=====> Mac OS вопросы и ответы
=====> Дистрибутивы Mac OS
=====> Новости из мира Mac OS
===> Windows
=====> Windows вопросы и ответы
=====> Новости из мира Windows
===> *BSD
=====> BSD вопросы и ответы
=====> Дистрибутивы BSD
=====> Новости из мира BSD
=> Программное Обеспечение
===> Система
===> Сети/Интернет
===> Аудио/Видео
===> Графика
===> Антивирусы
===> Офис
===> Разное
=> Сетевые технологии и средства
===> Безопасность информационных технологий
-----------------------------
Вооружение и военное дело
-----------------------------
=> На войне как на войне
===> Стрелковое Оружие
===> Боеприпасы
===> Спецназ
-----------------------------
Развлечения
-----------------------------
=> Это интересно
===> Факты интересные открытия
===> Сделай сам
===> Aвтомобили
=> Юмор
===> Анекдоты
===> Весёлые истории
=> Фильмы
===> Видео Клуб
=====> Комедия
=====> Отечественные фильмы
=====> Зарубежные фильмы
=====> Документальные фильмы
=====> Обзор кинофильмов
=====> Эротические фильмы
===> Видео приколы
===> Шокирующее видео
===> Видео в сети
=> Музыка
===> Наше Радио®
===> Музыкальные новости
=====> Зарубежная эстрада
=====> Русская эстрада
===> Музыка в сети
=> Компьютерные игры
===> Игровые сервера
===> Новости игрового мира
===> Компьютерные игры
=> Фотогалерея
===> Весёлые картинки
===> Гламур
===> Фото Творчество
===> Жесть
===> Конкурс • ФотоТворчество
=> Мужчины и Женщины
===> Только для мужчин
===> Только для женщин
===> Про это...
===> Знакомства
=> Флэйм
===> Болталка
===> Тесты
===> Игры на форуме
===> Опросы
===> Онлайн игры
===> Не достоверные Факты • Флуд
===> Разборки • Дуэли • Дискуссии
-----------------------------
Библиотека
-----------------------------
=> Рассказы • Фельетоны
===> Поэзия • Проза
===> Афоризмы
=> Художественная и техническая литература
===> Художественная литература
===> Техническая литература
===> Философия и Религия
===> Обучение
-----------------------------
Разное
-----------------------------
=> Здоровье
===> Здоровое питание
=> Объявления
===> Продам
===> Куплю
===> Поиск
===> Недвижимость
===> Сервис в Аргентине
===> Халява
=> Поздравлялка
=> Кулинарные вопросы и советы
===> Миллион Меню
-----------------------------
Сайт TV Он Лайн® и Русский Форум в Аргентине
-----------------------------
=> Обмен ссылками • Партнеры
Загружается...