24 Апрель 2024, 13:21:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости:
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по Visual Studio 2005  (Прочитано 16855 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BARBOSS
Постоялец
***

Бонус: +0/-0
Offline Offline

Сообщений: 64


We Live In Peace


Просмотр профиля
« : 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 Offline

Сообщений: 64


We Live In Peace


Просмотр профиля
« Ответ #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 Offline

Сообщений: 495


Researcher


Просмотр профиля
« Ответ #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 Offline

Сообщений: 64


We Live In Peace


Просмотр профиля
« Ответ #3 : 24 Август 2007, 17:33:04 »

По поводу того,что компилятор ругается:
Ты вызываешь не юникодную версию 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 Offline

Сообщений: 495


Researcher


Просмотр профиля
« Ответ #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 Offline

Сообщений: 267


Жмай те говорят!


Просмотр профиля
« Ответ #5 : 11 Апрель 2008, 06:32:02 »

И кто придумал только эти кодировки..... былаб одна, бошая :)
Записан

Чукча не писатель, чукча читатель...
Ray
Старожил
*****

Бонус: +3/-0
Offline Offline

Сообщений: 495


Researcher


Просмотр профиля
« Ответ #6 : 11 Апрель 2008, 10:16:46 »

Ну... можно использовать Unicode
Тогда можно будет и на китайском писать  :ad:
Записан

Одна голова - хорошо, а четыре руки быстрее!(с)
spyplane
Советник
Старожил
*****

Бонус: +0/-0
Offline Offline

Сообщений: 267


Жмай те говорят!


Просмотр профиля
« Ответ #7 : 11 Апрель 2008, 10:43:46 »

Ну... можно использовать Unicode
Тогда можно будет и на китайском писать  :ad:

это то ясно, что можно... но наплодили их, а теперь под unicode подгоняй сиди...
DC под линуксом делал:
Linux - UTF-8 локаль
DC-hub - UTF-8
WinDC - cp1251
windows - cp1251
Lunux dc - хоть одно настраивается нормально!

Компилим локаль, делаем рекоды.... а так был бы уникод один и все счастье!
Записан

Чукча не писатель, чукча читатель...
Ray
Старожил
*****

Бонус: +3/-0
Offline Offline

Сообщений: 495


Researcher


Просмотр профиля
« Ответ #8 : 12 Апрель 2008, 03:11:18 »

Еще можно написать свой класс по работе с кодировками.
А потом применять его при необходимости в своих проектах.
Записан

Одна голова - хорошо, а четыре руки быстрее!(с)
spyplane
Советник
Старожил
*****

Бонус: +0/-0
Offline Offline

Сообщений: 267


Жмай те говорят!


Просмотр профиля
« Ответ #9 : 12 Апрель 2008, 03:22:39 »

Еще можно написать свой класс по работе с кодировками.
А потом применять его при необходимости в своих проектах.

Да обычно когда пишеш сам все, то с кодировками все ясно, а вот когда чужое настраиваешь....
Записан

Чукча не писатель, чукча читатель...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.9 | SMF © 2006-2008, Simple Machines LLC