люди добрые, почему етот код не выводит на экран окно???? я нажимаю отладку а он просто моргает и всё. #include <windows.h> #define MAX_LOADSTRING 100 TCHAR WINDOWSCLASS[MAX_LOADSTRING]; // имя класса главного окна TCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка LRESULT CALLBACK MainWindProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_PAINT: break; case WM_DESTROY: { PostQuitMessage(0); return(0); }break; } return(DefWindowProc(hwnd, msg, wparam, lparam)); } int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX windowsclass; HWND hwnd; MSG msg; windowsclass.cbSize = sizeof(WNDCLASSEX); windowsclass.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW; windowsclass.lpfnWndProc = MainWindProc; windowsclass.cbClsExtra = 0; windowsclass.cbClsExtra = 0; windowsclass.hInstance = hinstance; windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW); windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); windowsclass.lpszMenuName = NULL; windowsclass.lpszClassName = WINDOWSCLASS; windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&windowsclass)) { return (0); } hwnd = CreateWindowEx(NULL, WINDOWSCLASS, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 500, 400, NULL, NULL, hinstance, NULL); if(!hwnd) { return FALSE; } ShowWindow(hwnd, SW_SHOWDEFAULT); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); }
windowsclass.lpszClassName = WINDOWSCLASS; Вместо WINDOWSCLASS должно быть имя класса. Например 'MyClass'
как в вижле организовать рандом в пределах какого-то значения.в борланд билдере я использовал randomize, в вижле никак не выходит.нагуглил rand, но как в него диапазон значений вбить так и не разобрался
получилось .только я так понял предел в 32767 значений.этого конечно хватит, но мб есть варианты с беспредельными значениями?
подскажите, почему данный код компилируется, но окно как только выводится на экран, сразу само закрывается. Я только и успеваю рассмотреть серый фон. Причём если я убираю код инициализации directX, то всё в порядке, окно на экране и ждёт пока я его не закрою. Вот исходник. Code: #include <windows.h> #include <d3d9.h> #include <d3dx9.h> WNDCLASSEX windowsclass; MSG msg; HWND hWnd; LPDIRECT3D9 pDirect3D = 0; LPDIRECT3DDEVICE9 pDirect3DDevice = 0; HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств. LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam) //функция обработки сообщений { switch(msg) { case WM_DESTROY: // закрытие(уничтожение) окна { ReleaseDX(); PostQuitMessage(0); return 0; } } return (DefWindowProc(hWnd,msg,wparam,lparam)); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { // инициализация класа окна windowsclass.cbSize = sizeof(windowsclass); // Размер всей структуры windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //Цвет фона окна windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW); //Вид курсора windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //Иконка приложения windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Иконка в заголовке окна windowsclass.hInstance = hInstance; //Экземпляр приложения windowsclass.lpfnWndProc = WinProc; //Наша функция обработки событий windowsclass.lpszClassName = L"windowsclass"; //Имя класса окна windowsclass.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW; //Задание стиля окна RegisterClassEx(&windowsclass); //Регистрация класа окна в операционной системе //Создание окна hWnd = CreateWindow( L"windowsclass", //Имя класса окна L"DirectX", // Заголовок окна WS_OVERLAPPEDWINDOW|WS_VISIBLE, //Стиль окна 100, 100, // Координаты левого верхнего угла 600, // Ширина окна 600, // Высота окна NULL, // Дескриптор родительского окна NULL, // Дескриптор меню hInstance, // Экземпляр NULL); // Дополнительные параметры if (SUCCEEDED(InitialDX(hWnd))) { ShowWindow(hWnd, nShowCmd); // Вывод окна UpdateWindow(hWnd); // Обновление окна ZeroMemory(&msg,sizeof(msg)); //Очистка сообщений while(msg.message!=WM_QUIT) // Цикл обработки сообщений { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); //Наш код } } } } HRESULT InitialDX(HWND hWnd) { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL; D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме) if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство return E_FAIL; return S_OK; } void Render() { pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); //Очистка вторичного буфера pDirect3DDevice->BeginScene(); //Начало рендеринга // Код отрисовки сцены pDirect3DDevice->EndScene(); //Конец рендеринга pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный } void ReleaseDX() { if(pDirect3DDevice!=NULL) pDirect3DDevice->Release(); if(pDirect3D!=NULL) pDirect3D->Release(); }
Плохой вариант, распределение совсем неравномерное получится. Лучше что-то вроде rand() | (rand() << log2(RAND_MAX))
ещё обнаружил что вот тут f (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство оно возвращает E_FAIL.
Текстовые функции Есть ли в С++ аналог функций VB: left() и right() ? Если нет, то возможно ли их реализовать?
Code: char str[80]="Строка"; int i,n; cout<<"Необходимое число знаков с правой стороны строки:"; cin>>i; for (n=strlen(str)-i;str[n];n++) cout<<str[n]; Вроде должно работать
Спасибо, лови + Кстати, как сделать чтоб в консоли русские буквы работали? А то краказябру всякую выводит...
Прочитать док по WinAPI-функции CharToOem и использовать ее) Или выводить в консоль сразу в Unicode, но это более сложно.
Юзай CharToOem из windows.h вот пример #include <windows.h> void main() { char buf[10]; char str[10]="Привет мир"; CharToOem(str, buf); cout<<buf<<endl; }
Не могу понять в чём ошибка: Code: int main () { char string[1024], message[512]; int cnt,i; CharToOem("Введите текст: ", message); cout << message << endl; cin >> string[1024]; CharToOem("Введите число: ", message); cout << message << endl; cin >> cnt; cout <<"\n"; return 0; } Выводит: Программа не воспринимает последний cin >> Может кто подскажет что не так?
Code: CharToOem("Введите текст: ", message); cout << message << endl; cin >> string[1024]; Здесь надо писать просто string
Подскажите пожалуйста, как эмулировать нажатия клавиш в чужом процессе? Под Windows. С ВинАПИ вобще незнаком, так что, желательно с рабочим примером.