Как добаваить кнопку
Вобщем окно создал а как в него добавить например кнопку не знаю!
Может кто подскажет?
Люди! Помогитя! Начал изучать API!
Вобщем окно создал а как в него добавить например кнопку не знаю!
Может кто подскажет?
Смотри в MSDN'е функцию CreateWindow
Смотри в MSDN'е функцию CreateWindow
Ладно кнопку я поместил! Но что-то все элементы в
этом окне выгледят как-то фигово! В обычном DialogBox скажем EditBox выглядит лучше чем в моем
Ладно кнопку я поместил! Но что-то все элементы в
этом окне выгледят как-то фигово! В обычном DialogBox скажем EditBox выглядит лучше чем в моем
Так ты стили настрой... тогда будет выглядеть нормально
Так ты стили настрой... тогда будет выглядеть нормально
Если ты имееш ввиду стиль как в XP. то он добавляется следующим образом:
1. добавь в твой resource.h строку
#define MANIFEST_RESOURCE_ID 1
2. добавь в resource.rc
MANIFEST_RESOURCE_ID RT_MANIFEST "app.exe.manifest"
3. создай файл в корне проекта с именем app.exe.manifest
и засунь туда следующий текст:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>Program Description</description>
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="FinderMem.exe"
type="win32"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Если ты имееш ввиду стиль как в XP. то он добавляется следующим образом:
1. добавь в твой resource.h строку
#define MANIFEST_RESOURCE_ID 1
2. добавь в resource.rc
MANIFEST_RESOURCE_ID RT_MANIFEST "app.exe.manifest"
3. создай файл в корне проекта с именем app.exe.manifest
и засунь туда следующий текст:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>Program Description</description>
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="FinderMem.exe"
type="win32"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Та зачем так париться? Можно просто при создании окна указать его стили...
Та зачем так париться? Можно просто при создании окна указать его стили...
Покажи пример как програмно ты создаш такой стиль XP к примеру обыкновенной BS_PUSHBUTTON?
Просто интересно как енто ты програмно заставиш винду использовать библиотеку Microsoft.Windows.Common-Controls 6.0 (Comctl32.dll) вместо 5 версии которая по умолчанию грузится вместе с прогой в XP для совместимости со старыми прогами,а данный файл указывает винде использовать 6 - ую версию вместо 5,отсюда и вид у контролов совершенно другой. Может я че не знаю,тогда поправьте.
Покажи пример
Щас я не могу пример дать, потому-што у меня щас студии нема, я ткоа винду переставил... там по-моему в параметрах CreateWindow можно задать св-ва окна... или потом SetWindowLong попробуй... св-ва этих функций смотри в MSDN...
А лучше всего юзать MFC, там всё это инкапсулировано и не надо никак заморачиваться с бесчисленным кол-вом функций... всё уже готово (всё уже украдено до нас :))))
Щас я не могу пример дать, потому-што у меня щас студии нема, я ткоа винду переставил... там по-моему в параметрах CreateWindow можно задать св-ва окна... или потом SetWindowLong попробуй... св-ва этих функций смотри в MSDN...
А лучше всего юзать MFC, там всё это инкапсулировано и не надо никак заморачиваться с бесчисленным кол-вом функций... всё уже готово (всё уже украдено до нас :))))
Щя ток смотрел и CreateWindow и CreateWindowEx и SetWindowLong,чет ниче не нашел. Тогда напиши всеже че за параметры,очень интересно. А MFC я не использую. Уж если и использовать библиотеку то WTL но никак не MFC.
Щя ток смотрел и CreateWindow и CreateWindowEx и SetWindowLong,чет ниче не нашел. Тогда напиши всеже че за параметры,очень интересно. А MFC я не использую. Уж если и использовать библиотеку то WTL но никак не MFC.
А чем те не нравится MFC? И WTL и MFC используют WinAPI
ну я не помню параметры, да их и не налдо помнить... посмотри лучше, там кажись шото в SetWindowLong в первом параметре хэндл, во втором какие стили окна добавить, а в третьем каие убрать... или наоборот... не помню уже, ещё можеш глянуть функцию SetWindowStyle... или она в ... кароче глянь...
А чем те не нравится MFC? И WTL и MFC используют WinAPI
ну я не помню параметры, да их и не налдо помнить... посмотри лучше, там кажись шото в SetWindowLong в первом параметре хэндл, во втором какие стили окна добавить, а в третьем каие убрать... или наоборот... не помню уже, ещё можеш глянуть функцию SetWindowStyle... или она в ... кароче глянь...
Не ну ты сам посмотри в msdn на msdn.com глянь,может имееш ввиду WS_EX_LAYERED? Хотя врядли. Остальные стили вряд ли подойдут,посмотри сам,как найдеш напиши.
SetWindowStyle? Что то новенькое...
Не ну ты сам посмотри в msdn на msdn.com глянь,может имееш ввиду WS_EX_LAYERED? Хотя врядли. Остальные стили вряд ли подойдут,посмотри сам,как найдеш напиши.
SetWindowStyle? Что то новенькое...
Слыш ребята? че-то не помогает! Вы напишите че точно в стилях выставить. И че это за файл !FinderMem.exe!У меня такого нету. Да, и хотелось бы шрифт в окне поменять , а то он какой-то корявый
Слыш ребята? че-то не помогает! Вы напишите че точно в стилях выставить. И че это за файл !FinderMem.exe!У меня такого нету. Да, и хотелось бы шрифт в окне поменять , а то он какой-то корявый
FinderMem.exe - это моя прога замени на свое имя,роли не играет
Все должно работать если ты все сделал как я написал, а насчет шрифта,так получи контект устройства этого окна hdc = GetDC(src_hwnd),затем
создай нужный шрифт функцией hfont= CreateFont(...), и затем выбери полученый хэндл шрифта в требуемый контекст типа SelectObject(hdc,hfont)
FinderMem.exe - это моя прога замени на свое имя,роли не играет
Все должно работать если ты все сделал как я написал, а насчет шрифта,так получи контект устройства этого окна hdc = GetDC(src_hwnd),затем
создай нужный шрифт функцией hfont= CreateFont(...), и затем выбери полученый хэндл шрифта в требуемый контекст типа SelectObject(hdc,hfont)
Незнаю. Все как сказал сделал но кнопки на икспишные не похожи. Мможет я не так их делаю,но у меня так:
HWND h_butok;
h_butok=CreateWindow("button",LPCTSTR("OK"),WS_VISIBLE|WS_BORDER|WS_CHILD,620,430,100,25,hWnd,(HMENU)IDC_BUTOK,hInst,NULL);
Незнаю. Все как сказал сделал но кнопки на икспишные не похожи. Мможет я не так их делаю,но у меня так:
HWND h_butok;
h_butok=CreateWindow("button",LPCTSTR("OK"),WS_VISIBLE|WS_BORDER|WS_CHILD,620,430,100,25,hWnd,(HMENU)IDC_BUTOK,hInst,NULL);
У тебя вообще операционка то XP? Если да то выложи сюда исходник,посмотрю,подкоректирую.
У тебя вообще операционка то XP? Если да то выложи сюда исходник,посмотрю,подкоректирую.
Операционка ХР. Со шрифтом че-то тоже не получается.
mmain.cpp
#include "stdafx.h"
#include "resource.h"
#include "windows.h"
HINSTANCE hInst;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
HACCEL hAccelTable;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_FIELDBOOK);
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = 0;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = 0;//LoadIcon(hInstance, (LPCTSTR)IDI_FIELDBOOK);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wcex.lpszMenuName = (LPCSTR)IDC_FIELDBOOK;
wcex.lpszClassName = "MyWindow";
wcex.hIconSm = 0;//LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance;
HWND hWnd;
hWnd = CreateWindowEx(WS_EX_STATICEDGE,"MyWindow", "FieldBook", WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU|WS_BORDER|WS_EX_DLGMODALFRAME,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL,0, hInstance, NULL);
HWND h_butok;
h_butok=CreateWindow("button","OK",WS_VISIBLE|WS_BORDER|WS_CHILD,620,430,100,25,hWnd,(HMENU)IDC_BUTOK,hInst,NULL);
HWND h_butdate;
h_butdate=CreateWindow("BUTTON","Получить",WS_VISIBLE|WS_CHILD,500,430,100,25,hWnd,(HMENU)IDC_BUTGET,hInst,NULL);
HWND h_edget;
h_edget=CreateWindow("RichEdit","",WS_BORDER|WS_VISIBLE|WS_CHILD,100,430,100,25,hWnd,(HMENU)IDC_EDGET,hInst,NULL);
if (!hWnd)
{
return FALSE;
}
//SetWindowLong(hWnd,0,GWL_STYLE);
HDC hdc = GetDC(h_butdate);
HFONT hfont= CreateFont(8,8,GM_ADVANCED,0,FW_NORMAL,true,0,0,RUSSIAN_CHARSET,OUT_OUTLINE_PRECIS,CLIP_LH_ANGLES,NONANTIALIASED_QUALITY,FF_ROMAN,"Arial");
SelectObject(hdc,hfont);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDM_about :
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_MNU_OPEN:
MessageBox(0,"OPEN","main",MB_OK);
break;
case IDM_MNU_SAVE:
MessageBox(0,"SAVE","main",MB_OK);
break;
case IDC_BUTOK:
MessageBox(0,"OK","main",MB_OK);
break;
case IDC_BUTGET:
MessageBox(0,"GET","main",MB_OK);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);
EndPaint(hWnd, &ps);
break;
case WM_CREATE:
//HWND h_butok;
//h_butok.CreateWindow("button","aa",WS_VISIBLE|WS_BORDER|WS_CHILD,0,0,100,50,hWnd,(HMENU)IDC_BUTOK,hInst,NULL);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
MANIFEST_RESOURCE_ID RT_MANIFEST "yourapp.exe.manifest"
вобщем открой блокнотом resource.rc и найди там строки вроде этих:
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
И сразу после директивы #endif // APSTUDIO_INVOKED
вставляй строку MANIFEST_RESOURCE_ID RT_MANIFEST "yourapp.exe.manifest",а 1 и 3 ой пункт делай как я описал.Так же включи где нить в своем хедере или прям в самом верху своего mmain.cpp строки(если у тебя этого раньше не было сделано):
#include <commctrl.h>
#pragma comment (lib,"comctl32.lib")
и добавь функцию InitCommonControls() в свой InitInstance в самое начало перед первыми вызовами CreateWindow, вроде все.
Если все равно не получится то упакуй весь проект со всеми файлами в архи и выложи здесь.
Короче не надо это сюда,я просил исходник со всеми файлами в zip Формате приаттаченый к твоему сообщению. А теперь я кажись понял в чем проблема и отнюдь не из твоих исходников,скорее всего ты не в том месте всатавил строки:
MANIFEST_RESOURCE_ID RT_MANIFEST "yourapp.exe.manifest"
вобщем открой блокнотом resource.rc и найди там строки вроде этих:
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
И сразу после директивы #endif // APSTUDIO_INVOKED
вставляй строку MANIFEST_RESOURCE_ID RT_MANIFEST "yourapp.exe.manifest",а 1 и 3 ой пункт делай как я описал.Так же включи где нить в своем хедере или прям в самом верху своего mmain.cpp строки(если у тебя этого раньше не было сделано):
#include <commctrl.h>
#pragma comment (lib,"comctl32.lib")
и добавь функцию InitCommonControls() в свой InitInstance в самое начало перед первыми вызовами CreateWindow, вроде все.
Если все равно не получится то упакуй весь проект со всеми файлами в архи и выложи здесь.
Все! Спасибо!С манифестом разобрался. Осталось разобраться со шрифром. И еще меня интересует вопрос: Почему у меня не оьображается RichEdit!
Все! Спасибо!С манифестом разобрался. Осталось разобраться со шрифром. И еще меня интересует вопрос: Почему у меня не оьображается RichEdit!
Теперь про шрифт. SelectObject для контролов не подходит,так как ты всего лиш замениш на свой hfont его текущий в hdc,но контролы хранят gdi обекты такие как шрифт,кисть и др в отдельном месте а не в текущем hdc,поэтому для установки шрифта пракстически на всех контролах буть то кнопка или edit - box и спользуется сообщение WM_SETTEXT котрое заменяет стандартный шрифт на твой собственный,делается это примерно так:
HWND hctl = CreateWindow("BUTTON",...
HFONT hfont=CreateFont(....
SendMessage(hctl,WM_SETFONT,(WPARAM)hfont,(LPARAM)true);
Теперь про шрифт. SelectObject для контролов не подходит,так как ты всего лиш замениш на свой hfont его текущий в hdc,но контролы хранят gdi обекты такие как шрифт,кисть и др в отдельном месте а не в текущем hdc,поэтому для установки шрифта пракстически на всех контролах буть то кнопка или edit - box и спользуется сообщение WM_SETTEXT котрое заменяет стандартный шрифт на твой собственный,делается это примерно так:
HWND hctl = CreateWindow("BUTTON",...
HFONT hfont=CreateFont(....
SendMessage(hctl,WM_SETFONT,(WPARAM)hfont,(LPARAM)true);
А про RichEdit ничего не знаешь? Почему его не видно? И если не трудно какой нить пример с CommonDialog'ом!
А про RichEdit ничего не знаешь? Почему его не видно? И если не трудно какой нить пример с CommonDialog'ом!
Короче с рич едитом необходимо сделать следующее:
LoadLibrary("Riched32.dll");
HWND hff=CreateWindowEx(0,"RichEdit","" , ES_LEFT |ES_MULTILINE |WS_VISIBLE|WS_CHILDWINDOW,0,0,400,500,hWnd,0,0,0);
Т.е. необходимо грузить библиотеку рича как показано выше
Короче с рич едитом необходимо сделать следующее:
LoadLibrary("Riched32.dll");
HWND hff=CreateWindowEx(0,"RichEdit","" , ES_LEFT |ES_MULTILINE |WS_VISIBLE|WS_CHILDWINDOW,0,0,400,500,hWnd,0,0,0);
Т.е. необходимо грузить библиотеку рича как показано выше
Слушай,помоги еще в одной фигне: не могу забрать путь из GetOpenFileName() и не могу установить филтр:
OPENFILENAME cd;
LPSTR file;
cd.lStructSize =sizeof(cd);
cd.hwndOwner = hWnd;
cd.hInstance = hInst;
cd.lpstrFilter = "Текстовые файлы,*.txt";
cd.lpstrCustomFilter = NULL ;
cd.nMaxCustFilter = NULL;
cd.nFilterIndex = NULL;
cd.nMaxFile = 256;
cd.lpstrFileTitle = NULL;
cd.nMaxFileTitle = NULL;
cd.lpstrInitialDir = NULL;
cd.lpstrTitle = NULL;
cd.Flags = OFN_CREATEPROMPT|OFN_HIDEREADONLY|OFN_EXPLORER;
cd.nFileOffset = NULL;
cd.nFileExtension= NULL;
cd.lpstrDefExt = NULL;
cd.lCustData = NULL;
cd.lpfnHook = NULL;
cd.lpTemplateName = NULL;
GetOpenFileName(&cd);
file=cd.lpstrFile;
Подскажи что исправить
char* OpenFileDialog(HINSTANCE hInstance,HWND hwowner,LPCSTR lpheader,LPCSTR lpfilter)
{
OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwowner;
ofn.hInstance = hInstance;
ofn.lpstrFilter=lpfilter;
ofn.lpstrFile = (LPSTR)calloc(MAX_PATH,sizeof(WCHAR));
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = lpheader;
ofn.Flags = OFN_HIDEREADONLY | OFN_EXPLORER | OFN_PATHMUSTEXIST |OFN_NONETWORKBUTTON | OFN_NOREADONLYRETURN ;
if(GetOpenFileName(&ofn)) return ofn.lpstrFile;
if(ofn.lpstrFile!=0) free(ofn.lpstrFile);
return 0;
}
Используй так:
int main(...)
{
char* namepath;
//возвращяет имя выбранного файла
namepath=OpenFileDialog(s_gif.hins,hwndDlg,"Open table","All Support Type\0*.jpg;*.jpeg;*.bmp;*.png;*.gif\0JPEG\0*.jpg;*.jpeg\0BMP\0*.bmp\0PNG\0*.png\0GIF\0*.gif\0");
}
Когда запустиш,думаю поймеш как формируются фильтры
Эксперементирую,так ты найдеш правильный путь!
И... читай MSDN тщятельнее.
В твоем примере ты не выделил память под путь для файла а именно lpstrFile
Эксперементирую,так ты найдеш правильный путь!
И... читай MSDN тщятельнее.
Ой! Поможи еще разок. Что-то я задолбался с этим char'ом. Читаю файл,хочу загнать каждую строку в массив и что-то не выходит.
FILE *defile;
char s1[19];
char mas[6];
int i;
i=0;
defile=fopen("default.txt","r");
while (fgets(s1, sizeof(s1), defile)
{
mas=s1;
i+=1;
}
fclose(defile);
Ой! Поможи еще разок. Что-то я задолбался с этим char'ом. Читаю файл,хочу загнать каждую строку в массив и что-то не выходит.
FILE *defile;
char s1[19];
char mas[6];
int i;
i=0;
defile=fopen("default.txt","r");
while (fgets(s1, sizeof(s1), defile)
{
mas=s1;
i+=1;
}
fclose(defile);
И че ты пытаешся сделать здесь? Присвоить 1 первый байт однобайтному массиву .
Делай так:
FILE *defile;
char s1[19];
char* mas[6];
int count_mas=0;
defile=fopen("default.txt","r");
while (fgets(s1, sizeof(s1), defile))
{
mas[count_mas]=(char*)malloc(sizeof(s1)*sizeof(char)+1);//выделяем память под массив
strncpy((char*)mas[count_mas],(char*)s1,sizeof(s1));//копируем строку в массив
count_mas++;
if(count_mas>5) break;
}
fclose(defile); [/QUOTE]
А лучше используй string из STL
И че ты пытаешся сделать здесь? Присвоить 1 первый байт однобайтному массиву .
Делай так:
FILE *defile;
char s1[19];
char* mas[6];
int count_mas=0;
defile=fopen("default.txt","r");
while (fgets(s1, sizeof(s1), defile))
{
mas[count_mas]=(char*)malloc(sizeof(s1)*sizeof(char)+1);//выделяем память под массив
strncpy((char*)mas[count_mas],(char*)s1,sizeof(s1));//копируем строку в массив
count_mas++;
if(count_mas>5) break;
}
fclose(defile);
А лучше используй string из STL [/QUOTE]
Что такое STL? И как это подключить?
А лучше используй string из STL
Что такое STL? И как это подключить? [/QUOTE]
STL это Standard Template Library (библиотека шаблонов)
Почитай что нить типа С++ для начинающих,хотя лучше страуструпа.
#include <string>
#include <iostream>
using namespace std ;
int main()
{
string s1;
cout << "Enter a sentence (use <space> as the delimiter): ";
getline(cin,s1, ' ');
cout << "You entered: " << s1 << endl;;
}
Что такое STL? И как это подключить?
STL это Standard Template Library (библиотека шаблонов)
Почитай что нить типа С++ для начинающих,хотя лучше страуструпа.
#include <string>
#include <iostream>
using namespace std ;
int main()
{
string s1;
cout << "Enter a sentence (use <space> as the delimiter): ";
getline(cin,s1, ' ');
cout << "You entered: " << s1 << endl;;
} [/QUOTE]
Кстати не знаешь почему когда посылаю NetMessageBufferSend() сообщение, например 'Hello' приходит '??o'
STL это Standard Template Library (библиотека шаблонов)
Почитай что нить типа С++ для начинающих,хотя лучше страуструпа.
#include <string>
#include <iostream>
using namespace std ;
int main()
{
string s1;
cout << "Enter a sentence (use <space> as the delimiter): ";
getline(cin,s1, ' ');
cout << "You entered: " << s1 << endl;;
}
Кстати не знаешь почему когда посылаю NetMessageBufferSend() сообщение, например 'Hello' приходит '??o' [/QUOTE]
И может я чего не понимаю ,но String у меня не работает!
D:\Win_my_source\fieldbook\fieldbook.cpp(39) : error C2146: syntax error : missing ';' before identifier 's1'
D:\Win_my_source\fieldbook\fieldbook.cpp(39) : error C2501: 'string' : missing storage-class or type specifiers
D:\Win_my_source\fieldbook\fieldbook.cpp(39) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
fieldbook.exe - 3 error(s), 0 warning(s)
Вот такую байду пишет.
Не String a string так и пиши.
Надеюсь ты не используеш int main(){},вставь этот пример в свою функцию и включи директивы с заголовками которые описаны выше,они должны находится в том же файле что и функция либо в глобальном файле. Если не получится покажи файл где ты пытаешся это использовать. Все здесь прекрасно работает.
Зачем тебе нужна NetMessageBufferSend,покажи код.
Не String a string так и пиши.
Надеюсь ты не используеш int main(){},вставь этот пример в свою функцию и включи директивы с заголовками которые описаны выше,они должны находится в том же файле что и функция либо в глобальном файле. Если не получится покажи файл где ты пытаешся это использовать. Все здесь прекрасно работает.
С NetMessageBufferSend() хочу просто по эксперементировать. А со string'ом напроч не хочет
работать.
С NetMessageBufferSend() хочу просто по эксперементировать. А со string'ом напроч не хочет
работать.
С NetMessageBufferSend у тебя была проблема из за того что ты передавал ansi(multi byte char) а не unicode (wide char) строки поэтому смотри код для преобразования строк:
wchar_t* bufw;
bufw=(wchar_t*)calloc(50,sizeof(wchar_t));
mbstowcs(bufw,(char*)msg,strlen((char*)msg));
x= NetMessageBufferSend (NULL,L"127.0.0.1",L"127.0.0.1",(LPBYTE)bufw,sizeof(msg)*2);
теперь все должно быть ОК.
А про string ты забыл указать using namespace std;
можно и без этой директивы но тогда нужно писать так:
std::string c1;
теперь твой код весь рабочий. вот выложил.
С NetMessageBufferSend у тебя была проблема из за того что ты передавал ansi(multi byte char) а не unicode (wide char) строки поэтому смотри код для преобразования строк:
wchar_t* bufw;
bufw=(wchar_t*)calloc(50,sizeof(wchar_t));
mbstowcs(bufw,(char*)msg,strlen((char*)msg));
x= NetMessageBufferSend (NULL,L"127.0.0.1",L"127.0.0.1",(LPBYTE)bufw,sizeof(msg)*2);
теперь все должно быть ОК.
А про string ты забыл указать using namespace std;
можно и без этой директивы но тогда нужно писать так:
std::string c1;
теперь твой код весь рабочий. вот выложил.
Ой! Спасибо! А то не знаю сколько я бы еще парился! Впринципе все нужные функции для работы с char'ом я уже написал сам! А за NetBufferSend() спасибо!
С NetMessageBufferSend у тебя была проблема из за того что ты передавал ansi(multi byte char) а не unicode (wide char) строки поэтому смотри код для преобразования строк:
wchar_t* bufw;
bufw=(wchar_t*)calloc(50,sizeof(wchar_t));
mbstowcs(bufw,(char*)msg,strlen((char*)msg));
x= NetMessageBufferSend (NULL,L"127.0.0.1",L"127.0.0.1",(LPBYTE)bufw,sizeof(msg)*2);
теперь все должно быть ОК.
А про string ты забыл указать using namespace std;
можно и без этой директивы но тогда нужно писать так:
std::string c1;
теперь твой код весь рабочий. вот выложил.
А может ты еще знаешь как заставить NetMessageBufferSend() понимать русский язык?
Да, и если не в лом погляди,что за ошибка:
Файл->Открыть-выбери че нить
А потом на кнопку Получить
А может ты еще знаешь как заставить NetMessageBufferSend() понимать русский язык?
Да, и если не в лом погляди,что за ошибка:
Файл->Открыть-выбери че нить
А потом на кнопку Получить
Для того чтобы конверить как англ так и рус алфавит используй более продвинутую системную функцию MultiByteToWideChar.
Замени у себя в коде:
mbstowcs(bufw,(char*)msg,trlen((char*)msg));
на:
MultiByteToWideChar(CP_ACP,B_PRECOMPOSED,(char*)msg,-1,bufw,50);
А ошибка у тебя возникает из за переполнения стека локальных переменных:
char chas1[1] ,minu1[1],secu1[1],day1[1],mes1[2],god1[2];
замени их на такое объявление:
char chas1[20] ,minu1[20],secu1[20],day1[250],mes1[20],god1[20];
И говорю же тебе лучше используй string,он тебе очень поможет,так как ты ничего практически не знаеш о массивах и как с ними работать.
Для того чтобы конверить как англ так и рус алфавит используй более продвинутую системную функцию MultiByteToWideChar.
Замени у себя в коде:
mbstowcs(bufw,(char*)msg,trlen((char*)msg));
на:
MultiByteToWideChar(CP_ACP,B_PRECOMPOSED,(char*)msg,-1,bufw,50);
А ошибка у тебя возникает из за переполнения стека локальных переменных:
char chas1[1] ,minu1[1],secu1[1],day1[1],mes1[2],god1[2];
замени их на такое объявление:
char chas1[20] ,minu1[20],secu1[20],day1[250],mes1[20],god1[20];
И говорю же тебе лучше используй string,он тебе очень поможет,так как ты ничего практически не знаеш о массивах и как с ними работать.
Че-то еррор не пропадает!
Че-то еррор не пропадает!
Не знай не должно быть больше ошибки в этом месте,может ты еще че там добавил. Давай исходник сюда посмотрю. Только файл с расширением ncb не вкладывай.
Не знай не должно быть больше ошибки в этом месте,может ты еще че там добавил. Давай исходник сюда посмотрю. Только файл с расширением ncb не вкладывай.
Ложу.
Ложу.
У тебя там куча ошибок. Используй дебаг для их поиска а лучше начинай переписывать все заново.
Вот исправленый код.
У тебя там куча ошибок. Используй дебаг для их поиска а лучше начинай переписывать все заново.
Вот исправленый код.
Слушай.У меня есть Tab Control в нем две вкладки. Как поместить Button во вторую вкладку?