Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ WinAPI

Автор: STEEL
Дата сообщения: 12.02.2003 18:49
Как реалзуется цвет окна в WINAPI ?
Автор: f_serg
Дата сообщения: 13.02.2003 10:38
STEEL
При регистрации класса окна, структура WNDCLASSEX.
Из MSDN:

Цитата:

.....
hbrBackground
Handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color). If a color value is given, you must convert it to one of the following HBRUSH types:
COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_BTNTEXT
COLOR_CAPTIONTEXT
COLOR_GRAYTEXT
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_INACTIVEBORDER
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_MENUTEXT
COLOR_SCROLLBAR
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT
The system automatically deletes class background brushes when the class is unregistered by using UnregisterClass. An application should not delete these brushes.
.....
Автор: STEEL
Дата сообщения: 18.02.2003 22:11
--------------------Configuration: GraphDemo - Win32 Debug--------------------
Compiling...
main.cpp
: error C2065: 'randomize' : undeclared identifier
: error C2065: 'random' : undeclared identifier
: error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

Код:
LRESULT CALLBACK GraphDemoWndProc(HWND, UINT, UINT, LONG);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "GraphDemo";
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = GraphDemoWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = 0;
WndClass.hCursor = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hIcon = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;
if(!RegisterClass(&WndClass))
{
MessageBox(0, "Can't create window", "Error", MB_OK);
return 0;
}
hWnd = CreateWindow(szClassName, "GraphDemo",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if(!hWnd)
{
MessageBox(0,"","", MB_OK);
return 0;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

LRESULT CALLBACK GraphDemoWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)
{
HDC hDC, hCompatibleDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
HBITMAP hCompatibleBitmap, hOldBitmap;
HPEN hOldPen;
static HPEN Pens[5];
HBRUSH hOldBrush;
static HBRUSH Brushes[6];
int i;

switch(Message)
{
case WM_PAINT:
randomize();
for(i = 0; i <= 4; i++)
{
Pens[i] = (CreatePen(i, 1, RGB(random(255), random(255), random(255))));
Brushes[i] = (CreateHatchBrush(i, RGB(random(255), random(255),random(255))));
}
GetClientRect(hWnd, &Rect);
hDC = BeginPaint(hWnd, &PaintStruct);
hCompatibleDC = CreateCompatibleDC(hDC);
GetClientRect (hWnd, &Rect);
hCompatibleBitmap = CreateCompatibleBitmap(hDC, Rect.right, Rect.bottom);
hOldBitmap = SelectObject(hCompatibleDC, hCompatibleBitmap);
PatBlt(hCompatibleDC, 0, 0, Rect.right, Rect.bottom, PATCOPY);
for(i = 0; i <= 9999; i++)
SetPixel(hCompatibleDC, random(Rect.right), random(Rect.bottom), RGB(random(255), random(255), random(255)));
for(i=0; i <= 9; i++)
{
hOldPen = SelectObject(hCompatibleDC, Pens(random(4)));
MoveToEx(hCompatibleDC, random(Rect.right, random(Rect.bottom), NULL));
LineTo(hCompatibleDC, random(Rect.right), random(Rect.bottom));
SelectObject(hCompatibleDC, hOldPen);
}
for(i = 0; i <= 5; i++)
{
hOldBrush = SelectObject(hCompatibleDC, Brushes(random(4)));
Rectangle(hCompatibleDC, random(Rect.right),
random(Rect.bottom),
random(Rect.right),
random(Rect.bottom));
Ellipse(hCompatibleDC, random(Rect.right),
random(Rect.bottom),
random(Rect.right),
random(Rect.bottom));
SelectObject(hCompatibleDC, hOldBrush);
}
BitBlt(hDC, PaintStruct.rcPaint.left, PaintStruct.rcPaint.top,
PaintStruct.rcPaint.right,
PaintStruct.rcPaint.bottom,
hCompatibleDC,
PaintStruct.rcPaint.left,
PaintStruct.rcPaint.top,
SRCCOPY);
for(i = 0; i<=4;i++)
{
DeleteObject(Pens[i]);
DeleteObject(Brushes[i]);
}
SelectObject(hCompatibleDC, hOldBitmap);
DeleteObject(hCompatibleBitmap);
DeleteDC(hCompatibleDC);
EndPaint(hWnd, &PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hWnd,Message,wParam, lParam);
}
Автор: f_serg
Дата сообщения: 19.02.2003 05:03
STEEL
Вместо randomize() и random() используй srand(), rand().
Пример из MSDN:

Код:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}
Автор: STEEL
Дата сообщения: 20.02.2003 06:17
Заменил всё, как ты сказал.

C:\Program Files\Microsoft Visual Studio\MyProjects\GraphDemo\main.cpp(66) : error C2065: 'random' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\GraphDemo\main.cpp(77) : error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

GraphDemo.exe - 2 error(s), 0 warning(s)
Автор: f_serg
Дата сообщения: 20.02.2003 09:41
STEEL

Цитата:
random

Будь внимательнее, rand().

Цитата:
main.cpp(77) : error C2440: '=' : cannot convert

77 мне ни о чем не говорит, ты же не весь main.cpp запостил.

Добавлено

Просто пометь строчку, например в своем предыдущем посте.
Автор: Medium
Дата сообщения: 12.03.2003 18:58
Народ, нужен большой хелп...
Необходима функция определения типа операционной системы (Win98, WinNT...Linux, Unix и т.д.) на Си. Или хотя бы как определить это Win или Linux(Unix).

Сам я пишу строго на Delphi, но тут понадобилась такая весч на Си.
Прошу не проходить мимо
Автор: Tom
Дата сообщения: 12.03.2003 20:52
BOOL GetVersionEx(
LPOSVERSIONINFO lpVersionInformation // pointer to version information structure
);
typedef struct _OSVERSIONINFO{
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;
Автор: dneprcomp
Дата сообщения: 12.03.2003 21:18
GetVersion
Добавил
Том раньше успел.
Автор: f_serg
Дата сообщения: 13.03.2003 05:18
Medium

Цитата:
Или хотя бы как определить это Win или Linux(Unix).

Это как? Один бинарник на две ОС?
Автор: Medium
Дата сообщения: 13.03.2003 18:38
Tom
dneprcomp

Спасибо за ответы Единственный вопрос - данная функция одинаково работает как для Windows-системы, так и Lunix(Unix и т.д.)?

f_serg
Примерно... Есть сишный код, работающий кросс-платформенно. Необходима функция, которая позволит определить, на какой именно платформе работаем.
Автор: dneprcomp
Дата сообщения: 13.03.2003 20:54
Наверное, если при обращении к GetVesion выдается Error, то это не Windows
Автор: Medium
Дата сообщения: 13.03.2003 22:48

Цитата:
Наверное, если при обращении к GetVesion выдается Error, то это не Windows


ценю твой юмор, но этого мягко говоря недостаточно
может быть ты знаешь способ узнать поточнее?
Автор: dneprcomp
Дата сообщения: 14.03.2003 00:36

Цитата:
Единственный вопрос - данная функция одинаково работает как для Windows-системы, так и Lunix(Unix и т.д.)?

Ну а если серьезнее, то как функция от Win системы может работать в Linux(Unix)?

Цитата:
Есть сишный код, работающий кросс-платформенно

А это что значит? Что именно работает и как?
Автор: f_serg
Дата сообщения: 14.03.2003 04:54
Medium

Цитата:
Есть сишный код, работающий кросс-платформенно.

Это как? Если код написан под две платформы, то все определяется на этапе компиляции кода. При помощи #ifdef
Автор: student
Дата сообщения: 14.03.2003 17:25

Цитата:
:--------------------Configuration: GraphDemo - Win32 Debug--------------------
error C2440: '=' : cannot convert from 'void *' to 'struct HBITMAP__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
//....................
WndClass.hCursor = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hIcon = LoadCursor(NULL, IDC_ARROW);

Я сюда только забрел, Наверное уже поздно, но похоже что здесь ошибка в этих 2 строках. После равенства - поменяй местами

Добавлено
ой, это я писал
STEELу
Автор: dneprcomp
Дата сообщения: 14.03.2003 19:28
Medium f_serg
Вот и я о том же. Если програма уже мультиплатформена, то ей не надо определять на какой платформе она сейчас.
Автор: Speccy
Дата сообщения: 15.03.2003 08:25
Объясните, пожалуйста, как пользоваться функцией ToAscii. Не могу разобраться. В описании тоже. Или посоветуйте, как сделать: имеется скан-код и дополнительный код нажатой клавиши. Нужно определить название клавиши.
Автор: student
Дата сообщения: 17.03.2003 21:12
Вопрос по Security API из Platform SDK
А как на NT/XP получить свойства пользователя имея Username (или SID).
Под свойствами я имею в виду ту инфу что видна через User Manager / User manager for Domains:
Описание пользователя, полное имя, ну и все остальные свойства.
Есть ли у кого идеи или ссылки ?
Автор: offroadpia
Дата сообщения: 17.03.2003 23:08
student
Pochitaj pro Active Directory i ADSI - mozhet okazat'sja prosche chem Security SDK
Автор: merlkerry
Дата сообщения: 19.03.2003 15:05
offroadpia
Цитата:
Pochitaj pro Active Directory i ADSI - mozhet okazat'sja prosche chem Security SDK
интересно же чем ???


student

юзай сл. функции

Код:
NetUserGetInfo
NetApiBufferFree
NetGetDCName
Автор: terminat0r
Дата сообщения: 22.03.2003 17:42
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?
Автор: AlexKambur
Дата сообщения: 22.03.2003 18:39
terminat0r

Цитата:
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?


DWORD GetModuleFileName(
HMODULE hModule, LPTSTR lpFilename, DWORD nSize);

В hModule заносишь описатель твоего модуля (обычно это hInstance из WinMain), в lpFileName получаешь полный путь к файлу.

Удачи.
Автор: terminat0r
Дата сообщения: 22.03.2003 21:40
спасибо
Автор: student
Дата сообщения: 24.03.2003 17:45
merlkerry
О, пасиба - то что доктор прописал!
Не там я искал ...

offroadpia
Спасибо тоже, но тогда это будет работать только если Active Directory и ADSI установлены...
Автор: TeXpert
Дата сообщения: 25.03.2003 00:35
terminat0r

Цитата:
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?

Есть ещё проще способ (далеко запрятанный в MSDN) -- аналогичный результат выдаст использование __argv[0], и он работает в Win32! Здесь хранится указатель на строку с адресом, просто пользуйся им)
Автор: Pinocchio
Дата сообщения: 27.03.2003 11:29
Подскажите пож. как принудительно завершить TrackingPopupMenu?
Автор: TeXpert
Дата сообщения: 28.03.2003 00:39
Pinocchio

Цитата:
Подскажите пож. как принудительно завершить TrackingPopupMenu?

А зачем? А потом, может, TrackPopupMenu?

Автор: react
Дата сообщения: 20.08.2003 14:23
Народ !!! Помогите разобраться пожалуйста !!!

Есть у меня диалог, который в программе запускается функцией DialogBoxParam()
и есть в этом диалоге поле типа Edit. Так вот, надо чтоб это поле принимало unicode,
поэтому я изменяю тип поля на RichEdit, после чего диалог перестает запускаться
вообще...

Может надо пользовать другую функцию для запуска диалога а не DialogBoxParam().

Если кто-то сталкивался с подобной проблемой или просто знает пути возможного ее
решения, подскажите пожайлуста, а то я в тупике !!!

Заранее огромное спасибо !!!
Автор: Flex256
Дата сообщения: 21.08.2003 06:04
react
может подойдет просто DialogBox...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

Предыдущая тема: посоветуйте книги по SQL


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.