Как реалзуется цвет окна в WINAPI ?
» C++ WinAPI
STEEL
При регистрации класса окна, структура WNDCLASSEX.
Из MSDN:
Цитата:
При регистрации класса окна, структура 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.
.....
--------------------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);
}
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);
}
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() );
}
Вместо 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() );
}
Заменил всё, как ты сказал.
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)
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)
STEEL
Цитата:
Будь внимательнее, rand().
Цитата:
77 мне ни о чем не говорит, ты же не весь main.cpp запостил.
Добавлено
Просто пометь строчку, например в своем предыдущем посте.
Цитата:
random
Будь внимательнее, rand().
Цитата:
main.cpp(77) : error C2440: '=' : cannot convert
77 мне ни о чем не говорит, ты же не весь main.cpp запостил.
Добавлено
Просто пометь строчку, например в своем предыдущем посте.
Народ, нужен большой хелп...
Необходима функция определения типа операционной системы (Win98, WinNT...Linux, Unix и т.д.) на Си. Или хотя бы как определить это Win или Linux(Unix).
Сам я пишу строго на Delphi, но тут понадобилась такая весч на Си.
Прошу не проходить мимо
Необходима функция определения типа операционной системы (Win98, WinNT...Linux, Unix и т.д.) на Си. Или хотя бы как определить это Win или Linux(Unix).
Сам я пишу строго на Delphi, но тут понадобилась такая весч на Си.
Прошу не проходить мимо
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;
LPOSVERSIONINFO lpVersionInformation // pointer to version information structure
);
typedef struct _OSVERSIONINFO{
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;
GetVersion
Добавил
Том раньше успел.
Добавил
Том раньше успел.
Medium
Цитата:
Это как? Один бинарник на две ОС?
Цитата:
Или хотя бы как определить это Win или Linux(Unix).
Это как? Один бинарник на две ОС?
Tom
dneprcomp
Спасибо за ответы Единственный вопрос - данная функция одинаково работает как для Windows-системы, так и Lunix(Unix и т.д.)?
f_serg
Примерно... Есть сишный код, работающий кросс-платформенно. Необходима функция, которая позволит определить, на какой именно платформе работаем.
dneprcomp
Спасибо за ответы Единственный вопрос - данная функция одинаково работает как для Windows-системы, так и Lunix(Unix и т.д.)?
f_serg
Примерно... Есть сишный код, работающий кросс-платформенно. Необходима функция, которая позволит определить, на какой именно платформе работаем.
Наверное, если при обращении к GetVesion выдается Error, то это не Windows
Цитата:
Наверное, если при обращении к GetVesion выдается Error, то это не Windows
ценю твой юмор, но этого мягко говоря недостаточно
может быть ты знаешь способ узнать поточнее?
Цитата:
Единственный вопрос - данная функция одинаково работает как для Windows-системы, так и Lunix(Unix и т.д.)?
Ну а если серьезнее, то как функция от Win системы может работать в Linux(Unix)?
Цитата:
Есть сишный код, работающий кросс-платформенно
А это что значит? Что именно работает и как?
Medium
Цитата:
Это как? Если код написан под две платформы, то все определяется на этапе компиляции кода. При помощи #ifdef
Цитата:
Есть сишный код, работающий кросс-платформенно.
Это как? Если код написан под две платформы, то все определяется на этапе компиляции кода. При помощи #ifdef
Цитата:
:--------------------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у
Medium f_serg
Вот и я о том же. Если програма уже мультиплатформена, то ей не надо определять на какой платформе она сейчас.
Вот и я о том же. Если програма уже мультиплатформена, то ей не надо определять на какой платформе она сейчас.
Объясните, пожалуйста, как пользоваться функцией ToAscii. Не могу разобраться. В описании тоже. Или посоветуйте, как сделать: имеется скан-код и дополнительный код нажатой клавиши. Нужно определить название клавиши.
Вопрос по Security API из Platform SDK
А как на NT/XP получить свойства пользователя имея Username (или SID).
Под свойствами я имею в виду ту инфу что видна через User Manager / User manager for Domains:
Описание пользователя, полное имя, ну и все остальные свойства.
Есть ли у кого идеи или ссылки ?
А как на NT/XP получить свойства пользователя имея Username (или SID).
Под свойствами я имею в виду ту инфу что видна через User Manager / User manager for Domains:
Описание пользователя, полное имя, ну и все остальные свойства.
Есть ли у кого идеи или ссылки ?
student
Pochitaj pro Active Directory i ADSI - mozhet okazat'sja prosche chem Security SDK
Pochitaj pro Active Directory i ADSI - mozhet okazat'sja prosche chem Security SDK
offroadpia
Цитата:
student
юзай сл. функции
Код:
NetUserGetInfo
NetApiBufferFree
NetGetDCName
Цитата:
Pochitaj pro Active Directory i ADSI - mozhet okazat'sja prosche chem Security SDKинтересно же чем ???
student
юзай сл. функции
Код:
NetUserGetInfo
NetApiBufferFree
NetGetDCName
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?
terminat0r
Цитата:
DWORD GetModuleFileName(
HMODULE hModule, LPTSTR lpFilename, DWORD nSize);
В hModule заносишь описатель твоего модуля (обычно это hInstance из WinMain), в lpFileName получаешь полный путь к файлу.
Удачи.
Цитата:
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?
DWORD GetModuleFileName(
HMODULE hModule, LPTSTR lpFilename, DWORD nSize);
В hModule заносишь описатель твоего модуля (обычно это hInstance из WinMain), в lpFileName получаешь полный путь к файлу.
Удачи.
спасибо
merlkerry
О, пасиба - то что доктор прописал!
Не там я искал ...
offroadpia
Спасибо тоже, но тогда это будет работать только если Active Directory и ADSI установлены...
О, пасиба - то что доктор прописал!
Не там я искал ...
offroadpia
Спасибо тоже, но тогда это будет работать только если Active Directory и ADSI установлены...
terminat0r
Цитата:
Есть ещё проще способ (далеко запрятанный в MSDN) -- аналогичный результат выдаст использование __argv[0], и он работает в Win32! Здесь хранится указатель на строку с адресом, просто пользуйся им)
Цитата:
может кто-то быстро может ответить: как определить директорию, в которой работает моя программа?
Есть ещё проще способ (далеко запрятанный в MSDN) -- аналогичный результат выдаст использование __argv[0], и он работает в Win32! Здесь хранится указатель на строку с адресом, просто пользуйся им)
Подскажите пож. как принудительно завершить TrackingPopupMenu?
Pinocchio
Цитата:
А зачем? А потом, может, TrackPopupMenu?
Цитата:
Подскажите пож. как принудительно завершить TrackingPopupMenu?
А зачем? А потом, может, TrackPopupMenu?
Народ !!! Помогите разобраться пожалуйста !!!
Есть у меня диалог, который в программе запускается функцией DialogBoxParam()
и есть в этом диалоге поле типа Edit. Так вот, надо чтоб это поле принимало unicode,
поэтому я изменяю тип поля на RichEdit, после чего диалог перестает запускаться
вообще...
Может надо пользовать другую функцию для запуска диалога а не DialogBoxParam().
Если кто-то сталкивался с подобной проблемой или просто знает пути возможного ее
решения, подскажите пожайлуста, а то я в тупике !!!
Заранее огромное спасибо !!!
Есть у меня диалог, который в программе запускается функцией DialogBoxParam()
и есть в этом диалоге поле типа Edit. Так вот, надо чтоб это поле принимало unicode,
поэтому я изменяю тип поля на RichEdit, после чего диалог перестает запускаться
вообще...
Может надо пользовать другую функцию для запуска диалога а не DialogBoxParam().
Если кто-то сталкивался с подобной проблемой или просто знает пути возможного ее
решения, подскажите пожайлуста, а то я в тупике !!!
Заранее огромное спасибо !!!
react
может подойдет просто DialogBox...
может подойдет просто DialogBox...
Страницы: 12345678910111213141516171819202122232425262728293031323334353637
Предыдущая тема: посоветуйте книги по SQL
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.