На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> 2 вопросa по winapi
    №1
    Создал win32 aplication в VC++ 2005 (winapi приложение)...в общем, все диалоги и т.д. можно редактировать через оч удобный редактор.. (все это чудо хранится в rc файле)..но я хочу чтоб главное окно тоже бралось с rc, так на много удобней его рисовать :)

    №2
    Пытаюсь исползовать MessageBox(); пишу вот так: "MessageBox(NULL,"TEST!",NULL,0);"
    И оно мне: cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR'

    Если пишу вот так: "MessageBox(NULL,LPCWSTR("TEST!"),NULL,0);" ошибок нет, но вместо текста выводятся какие-то карлякули...

    Надеюсь вопросы не слишком тупые :) Спасибо заранее :)
      1.
      Цитата Jeno @
      но я хочу чтоб главное окно тоже бралось с rc, так на много удобней его рисовать

      Главное тока руками

      2. MessageBox(NULL,L"TEST!",L"",0);
        жалко :(
          Цитата cozzzy @
          2. MessageBox(NULL,L"TEST!",L"",0);

          Лучше MessageBox(NULL, _T("TEST!"),_T(""),0);
            есть щее пару вопросов...
            1.как узнать какой тип данных у переменной?
            2.как перевести с одного типа в другой? например LPWSTR в u_short... и откуда вообще вы узнаете как переводить с одного типа данных в другой?!их же не мерено...и в мсдн я даже не представляю что написать... :wacko:
            з.ы.может где-то дока есть...возможно список все типов данных... :unsure:
              Цитата Jeno @
              их же не мерено

              Да их вообще мало, просто такие типы, как LPWSTR всего лишь являются макросами и LPWSTR это всего лишь (wchar_t *)
              Цитата Jeno @
              в мсдн я даже не представляю что написать...

              data conversion routines
              Цитата Jeno @
              как узнать какой тип данных у переменной?

              Посмотри на typeid()
                1. чтобы главное было в .rc файле - создавай MFC Dialog
                2. MessageBox(NULL, TEXT("Hello !!!"), NULL, MB_OK) - без подключения MFC
                MessageBox(NULL, _T("Hello !!!"), NULL, MB_OK) - с подключением MFC

                если хочешьо задавать явно, то:
                ExpandedWrap disabled
                  MessageBoxA(NULL, "Hello !!!", NULL, MB_OK); // ANSI
                  MessageBoxW(NULL, L"Hello !!!", NULL, MB_OK); // Unicode


                непонятно токо, зачем переводить LPWSTR в u_short???
                LPWSTR - это указатель (4 байта), а u_short - число (2 байта)... потери будут !
                  Цитата alexander.stoyan, 28.12.2006, 10:14:30, 1394212
                  1. чтобы главное было в .rc файле - создавай MFC Dialog

                  разницы помоему нет какой тип проекта
                  если MFC то лезим в InitInstance и там решаем кто будет главным.
                  если АПИ, то помоему там тоже всё понятно :yes:
                    есть поле для ввода текста, оно возвращет данные в LPWSTR, нужно эти данные вставить в функцию...
                    вот смотрите:

                    вот так вот появляется ошибка...потому что inet_addr() и htons() ругается на то что port и host являются LPWSTR...
                    ExpandedWrap disabled
                      char port[10] = "";
                      char host[50] = "";
                      GetDlgItemText(hDlg,IDC_PORT,LPWSTR(port),10);
                      GetDlgItemText(hDlg,IDC_HOST,LPWSTR(host),50);
                       
                      clientService.sin_addr.s_addr = inet_addr(host);
                      clientService.sin_port = htons(port);


                    и я не знаю как переконвертировать....пробовал вот так:

                    ExpandedWrap disabled
                      clientService.sin_port = htons(u_short(port));
                    ошибок нет, но данные повреждаются...
                    Сообщение отредактировано: Jeno -
                      ExpandedWrap disabled
                        char port[10] = "";
                        char host[50] = "";
                        GetDlgItemTextA(hDlg,IDC_PORT,port,10);
                        GetDlgItemTextA(hDlg,IDC_PORT,host,50);
                         
                        clientService.sin_addr.s_addr = inet_addr(host);
                        clientService.sin_port = htons(port);
                        может так?
                        ExpandedWrap disabled
                          int WideCharToMultiByte(
                            UINT CodePage,            // code page
                            DWORD dwFlags,            // performance and mapping flags
                            LPCWSTR lpWideCharStr,    // wide-character string
                            int cchWideChar,          // number of chars in string
                            LPSTR lpMultiByteStr,     // buffer for new string
                            int cbMultiByte,          // size of buffer
                            LPCSTR lpDefaultChar,     // default for unmappable chars
                            LPBOOL lpUsedDefaultChar  // set when default char used
                          );
                        Сообщение отредактировано: ElcnU -
                          Цитата ElcnU @
                          может так?
                          ExpandedWrap disabled
                            int WideCharToMultiByte(
                              UINT CodePage,            // code page
                              DWORD dwFlags,            // performance and mapping flags
                              LPCWSTR lpWideCharStr,    // wide-character string
                              int cchWideChar,          // number of chars in string
                              LPSTR lpMultiByteStr,     // buffer for new string
                              int cbMultiByte,          // size of buffer
                              LPCSTR lpDefaultChar,     // default for unmappable chars
                              LPBOOL lpUsedDefaultChar  // set when default char used
                            );

                          это для винапи?

                          з.ы.мне нужно научится переводить типы данных....или не возможно перевести LPWSTR в u_short???

                          -Added
                          Цитата alexander.stoyan @
                          ExpandedWrap disabled
                            char port[10] = "";
                            char host[50] = "";
                            GetDlgItemTextA(hDlg,IDC_PORT,port,10);
                            GetDlgItemTextA(hDlg,IDC_PORT,host,50);
                             
                            clientService.sin_addr.s_addr = inet_addr(host);
                            clientService.sin_port = htons(port);

                          port и host приходится переводить в LPWSTR, так как GetDlgItemText() ругается....просит LPWSTR а не char....
                            а ты точно GetDlgItemTextA написал?
                              Цитата Jeno, 28.12.2006, 14:23:56, 1394613
                              з.ы.мне нужно научится переводить типы данных....или не возможно перевести LPWSTR в u_short???

                              ну и переведёшь в соответствии с требуемой кодировкой
                                вот смотрите:

                                ExpandedWrap disabled
                                  void mconnect(u_short port, char *host)
                                  {
                                      ...
                                      clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
                                      clientService.sin_port = htons(port);
                                      ...
                                  }
                                   
                                  char port[10] = "";
                                  char host[50] = "";
                                  GetDlgItemTextA(hDlg,IDC_PORT,port,10);
                                  GetDlgItemTextA(hDlg,IDC_HOST,host,50);
                                  mconnect(u_short(port),host);


                                ошибок нет, но данные повреждаются (когда в поле (IDC_PORT) вписываю порт 8090 то клиент пытается подконнектится и потом выдает ошибку...но если я в htons(port); вместо переменной port вписываю просто 8090 то все ок)...где нужно исправить?! и помечу???
                                з.ы.сори за наглость...больше не у кого спросить.. :'(
                                  Jeno
                                  char a[3] = "30";
                                  это срока! строка состоит из 3-х символов, каждый по байту. первый символ - '3', второй - '0', третий - символ конца строки - '\n';

                                  тебе нужет u_short, что есть unsigned short, что есть 2 байтоное целое число!!
                                  хоть строка и есть число, но представлена она в совершенно другом формате!
                                  Откуда компьютер знает что те символы которые ты ввел - это число в конце концов? Это должен знать (и проверять) ты!!
                                  и затем из этих символов сделать нормальное, понятное компьютеру число!
                                  для этого есть ряд средств.

                                  из чистого C++ есть строковые потокаи для узких и широких символоа (stringstream, wstringstream)
                                  на апи есть atoi, wtoi
                                    Цитата LuckLess @
                                    третий - символ конца строки - '\n';

                                    хочу не согласится, конец строки это \0!

                                    а по делу, у человека помоему в проекте прописано #define UNICODE, если у него компилятор постоянно пытается подсунуть ему Unicode АПИшки...
                                      Цитата wertyman @
                                      хочу не согласится, конец строки это \0!

                                      ну да..
                                      Цитата wertyman @
                                      а по делу, у человека помоему в проекте прописано #define UNICODE, если у него компилятор постоянно пытается подсунуть ему Unicode АПИшки...

                                      ну да.. виндовый проект по умолчанию юникодный вродебы..
                                        Цитата LuckLess @
                                        ну да.. виндовый проект по умолчанию юникодный вродебы..

                                        Вот блин, это 2005 такие чудеса выдает чтоли ? :wacko:
                                        И зачем оно надо, пусть человек работает нормально со строками...
                                          Цитата wertyman @
                                          И зачем оно надо, пусть человек работает нормально со строками...

                                          а чем тебе широкие строки не нормальные?
                                            ответ на 1-й вопрос: Рисуй главное окно в редакторе, а показывай его так:
                                            ExpandedWrap disabled
                                              void Main()
                                              {
                                                  DialogBox(GetModuleHandle(NULL),(LPCSTR)IDD_DIALOG1,NULL,DlgProc);
                                              }



                                            Тупой пример из э-э... статьи... :
                                            ExpandedWrap disabled
                                              #include "windows.h"
                                              #include "resource.h"
                                               
                                              char msg[1000];
                                              char buf[100];
                                              char bigb[100];
                                              char minb[100];
                                               
                                              INT_PTR CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
                                              {
                                                  switch (uMsg)
                                                  {
                                                  case WM_INITDIALOG:
                                                      SetClassLong(hwndDlg, GCL_HICON, (LONG)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)));        
                                                      break;
                                                  case WM_COMMAND:
                                                      if (HIWORD(wParam)==BN_CLICKED)
                                                      {
                                                          switch(LOWORD(wParam))
                                                          {
                                                          case IDOK:
                                                              GetDlgItemText(hwndDlg,IDC_EDIT1,buf,100);
                                                              lstrcpy(bigb,buf);
                                                              lstrcpy(minb,buf);
                                                              CharUpper(bigb);
                                                              CharLower(minb);
                                                              wsprintf(msg,"Пароль: '%s'\nБольшими: '%s'\nМаленькими: '%s'\nЧислобукофф: %i\n\nАминь.",
                                                                  buf,bigb,minb,lstrlen(buf));
                                                              MessageBox(hwndDlg,msg ,"Пароль:",MB_ICONINFORMATION);
                                                              break;
                                                          case IDCOPUT:
                                                              SendMessage(hwndDlg,WM_CLOSE,0,0);
                                                              break;
                                                          }
                                                      }
                                                      break;
                                                  case WM_CLOSE:
                                                      if (MessageBox(hwndDlg,"Закрыть?","",MB_YESNO)==IDYES)
                                                      {
                                                          EndDialog(hwndDlg,0);
                                                      }
                                                      break;
                                                  }
                                                  return 0;
                                              }
                                               
                                              void Main()
                                              {
                                                  DialogBox(GetModuleHandle(NULL),(LPCSTR)IDD_DIALOG1,NULL,DlgProc);
                                              }
                                              Цитата mad_avenger @
                                              ExpandedWrap disabled
                                                void Main()
                                                {
                                                    DialogBox(GetModuleHandle(NULL),(LPCSTR)IDD_DIALOG1,NULL,DlgProc);
                                                }

                                              вот это и т.п. получается не нужно?
                                              з.ы.если я не создаю окно, а загружаю его с РС, знач мне не нужно это?
                                              ExpandedWrap disabled
                                                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_WINAPI));
                                                    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
                                                    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
                                                    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_WINAPI);
                                                    wcex.lpszClassName  = szWindowClass;
                                                    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
                                                 
                                                    return RegisterClassEx(&wcex);
                                                }



                                              За пример спасибо огромное :)
                                              з.ы.а где такие статьи можно найти? просто все самому приходится узнать....весь мсдн перерыл пока нашел что мне нужно :)
                                                на счет постоянной конвертации из широких символов в простые, зачем усложнять себе жизнь и использовать char веть есть же замечательный тип TCHAR. А на счет главного окна, то его тоже можно сделать диалогом и спокойно редактировать через редактор.
                                                Сообщение отредактировано: maksa_2000 -
                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                0 пользователей:


                                                Рейтинг@Mail.ru
                                                [ Script execution time: 0,0553 ]   [ 16 queries used ]   [ Generated: 14.05.24, 18:38 GMT ]