Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.48.212] |
|
Сообщ.
#1
,
|
|
|
№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);" ошибок нет, но вместо текста выводятся какие-то карлякули... Надеюсь вопросы не слишком тупые Спасибо заранее |
Сообщ.
#2
,
|
|
|
1.
Цитата Jeno @ но я хочу чтоб главное окно тоже бралось с rc, так на много удобней его рисовать Главное тока руками 2. MessageBox(NULL,L"TEST!",L"",0); |
Сообщ.
#3
,
|
|
|
жалко
|
Сообщ.
#4
,
|
|
|
Цитата cozzzy @ 2. MessageBox(NULL,L"TEST!",L"",0); Лучше MessageBox(NULL, _T("TEST!"),_T(""),0); |
Сообщ.
#5
,
|
|
|
есть щее пару вопросов...
1.как узнать какой тип данных у переменной? 2.как перевести с одного типа в другой? например LPWSTR в u_short... и откуда вообще вы узнаете как переводить с одного типа данных в другой?!их же не мерено...и в мсдн я даже не представляю что написать... з.ы.может где-то дока есть...возможно список все типов данных... |
Сообщ.
#6
,
|
|
|
Цитата Jeno @ их же не мерено Да их вообще мало, просто такие типы, как LPWSTR всего лишь являются макросами и LPWSTR это всего лишь (wchar_t *) Цитата Jeno @ в мсдн я даже не представляю что написать... data conversion routines Цитата Jeno @ как узнать какой тип данных у переменной? Посмотри на typeid() |
Сообщ.
#7
,
|
|
|
1. чтобы главное было в .rc файле - создавай MFC Dialog
2. MessageBox(NULL, TEXT("Hello !!!"), NULL, MB_OK) - без подключения MFC MessageBox(NULL, _T("Hello !!!"), NULL, MB_OK) - с подключением MFC если хочешьо задавать явно, то: MessageBoxA(NULL, "Hello !!!", NULL, MB_OK); // ANSI MessageBoxW(NULL, L"Hello !!!", NULL, MB_OK); // Unicode непонятно токо, зачем переводить LPWSTR в u_short??? LPWSTR - это указатель (4 байта), а u_short - число (2 байта)... потери будут ! |
Сообщ.
#8
,
|
|
|
Цитата alexander.stoyan, 28.12.2006, 10:14:30, 1394212 1. чтобы главное было в .rc файле - создавай MFC Dialog разницы помоему нет какой тип проекта если MFC то лезим в InitInstance и там решаем кто будет главным. если АПИ, то помоему там тоже всё понятно |
Сообщ.
#9
,
|
|
|
есть поле для ввода текста, оно возвращет данные в LPWSTR, нужно эти данные вставить в функцию...
вот смотрите: вот так вот появляется ошибка...потому что inet_addr() и htons() ругается на то что port и host являются LPWSTR... 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); и я не знаю как переконвертировать....пробовал вот так: clientService.sin_port = htons(u_short(port)); |
Сообщ.
#10
,
|
|
|
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); |
Сообщ.
#11
,
|
|
|
может так?
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 ); |
Сообщ.
#12
,
|
|
|
Цитата ElcnU @ может так? 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 @ 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.... |
Сообщ.
#13
,
|
|
|
а ты точно GetDlgItemTextA написал?
|
Сообщ.
#14
,
|
|
|
Цитата Jeno, 28.12.2006, 14:23:56, 1394613 з.ы.мне нужно научится переводить типы данных....или не возможно перевести LPWSTR в u_short??? ну и переведёшь в соответствии с требуемой кодировкой |
Сообщ.
#15
,
|
|
|
вот смотрите:
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 то все ок)...где нужно исправить?! и помечу??? з.ы.сори за наглость...больше не у кого спросить.. |
Сообщ.
#16
,
|
|
|
Jeno
char a[3] = "30"; это срока! строка состоит из 3-х символов, каждый по байту. первый символ - '3', второй - '0', третий - символ конца строки - '\n'; тебе нужет u_short, что есть unsigned short, что есть 2 байтоное целое число!! хоть строка и есть число, но представлена она в совершенно другом формате! Откуда компьютер знает что те символы которые ты ввел - это число в конце концов? Это должен знать (и проверять) ты!! и затем из этих символов сделать нормальное, понятное компьютеру число! для этого есть ряд средств. из чистого C++ есть строковые потокаи для узких и широких символоа (stringstream, wstringstream) на апи есть atoi, wtoi |
Сообщ.
#17
,
|
|
|
Цитата LuckLess @ третий - символ конца строки - '\n'; хочу не согласится, конец строки это \0! а по делу, у человека помоему в проекте прописано #define UNICODE, если у него компилятор постоянно пытается подсунуть ему Unicode АПИшки... |
Сообщ.
#18
,
|
|
|
Цитата wertyman @ хочу не согласится, конец строки это \0! ну да.. Цитата wertyman @ а по делу, у человека помоему в проекте прописано #define UNICODE, если у него компилятор постоянно пытается подсунуть ему Unicode АПИшки... ну да.. виндовый проект по умолчанию юникодный вродебы.. |
Сообщ.
#19
,
|
|
|
Цитата LuckLess @ ну да.. виндовый проект по умолчанию юникодный вродебы.. Вот блин, это 2005 такие чудеса выдает чтоли ? И зачем оно надо, пусть человек работает нормально со строками... |
Сообщ.
#20
,
|
|
|
Цитата wertyman @ И зачем оно надо, пусть человек работает нормально со строками... а чем тебе широкие строки не нормальные? |
Сообщ.
#21
,
|
|
|
ответ на 1-й вопрос: Рисуй главное окно в редакторе, а показывай его так:
void Main() { DialogBox(GetModuleHandle(NULL),(LPCSTR)IDD_DIALOG1,NULL,DlgProc); } Тупой пример из э-э... статьи... : #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); } |
Сообщ.
#22
,
|
|
|
Цитата mad_avenger @ void Main() { DialogBox(GetModuleHandle(NULL),(LPCSTR)IDD_DIALOG1,NULL,DlgProc); } вот это и т.п. получается не нужно? з.ы.если я не создаю окно, а загружаю его с РС, знач мне не нужно это? 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); } За пример спасибо огромное з.ы.а где такие статьи можно найти? просто все самому приходится узнать....весь мсдн перерыл пока нашел что мне нужно |
Сообщ.
#23
,
|
|
|
на счет постоянной конвертации из широких символов в простые, зачем усложнять себе жизнь и использовать char веть есть же замечательный тип TCHAR. А на счет главного окна, то его тоже можно сделать диалогом и спокойно редактировать через редактор.
|