Форум: "WinAPI";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Внизкартинка на форме Найти похожие ветки
← →
buka (2003-12-19 15:22) [0]Мастера подскажите. :-( Как на форму, без VCL, пристроить картинку, для разных форматов?
← →
xli (2003-12-19 16:25) [1]А как это без VCL? Ведь TForm тоже родом из VCL... :)
Изъясняйтесь понятнее.
А так можно из файла загрузить изображение в TBitmap, а потом на Canvas формы его вывести. Можно, еще по точкам его нашкрябать, но это ОЧЕНЬ не быстро получится.
← →
DVM (2003-12-19 16:50) [2]BitBlt() в обработчике WM_PAINT
← →
buka (2003-12-19 17:05) [3]Как сюда добавить картинку?
WinMin.dpr
program WinMin;
uses
Windows,
Messages;
const
AppName = "WinMin";
Var
Window : HWnd;
hButton1, hLabel1 : HWnd;
Message : TMsg;
WindowClass : TWndClass;
function WindowProc (Window : HWnd; Message, WParam : Word;
LParam : LongInt) : LongInt; stdcall;
begin
WindowProc := 0;
case Message of
wm_Destroy : begin
PostQuitMessage (0);
Exit;
end;
// реакция на нажатие кнопки
wm_Command : if lParam = hButton1 then MessageBeep (mb_OK);
end; // case
WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;
begin
with WindowClass do begin
Style := cs_HRedraw or cs_VRedraw;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := LoadIcon (0, idi_Application);
hCursor := LoadCursor (0, idc_Arrow);
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := "";
lpszClassName := AppName;
end;
If RegisterClass (WindowClass) = 0 then Halt (255);
Window := CreateWindow (AppName, "Win_Min", ws_OverlappedWindow,
cw_UseDefault, cw_UseDefault, cw_UseDefault, cw_UseDefault,
0, 0, HInstance, nil);
// Создание окна кнопки
hButton1 := CreateWindow ("Button", "Button1",
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
5, 5, 65, 24, Window, 0, hInstance, nil);
// Создание окна метки
hLabel1 := CreateWindow("Static", "Label1", WS_VISIBLE or WS_CHILD or SS_LEFT,
80, 10, 70, 20, Window, 0, hInstance, nil);
ShowWindow (Window, CmdShow);
UpdateWindow (Window);
// Устанавливаем фокус на кнопке
SetFocus(hButton1);
while GetMessage (Message, 0, 0, 0) do begin
TranslateMessage (Message);
DispatchMessage (Message);
end;
Halt (Message.wParam);
end.
← →
deema (2003-12-19 23:01) [4]1.
Прикрепить картинку к файлу можно создав и подключив файл ресурсов
program winmin;
{$R mybmp.res mybmp.rc}
В каталоге с проектом создать текстовый файл
mybmp.rc со строчкой
BITMAPRESUORCENAME BITMAP "mybmp.bmp"
При компиляции проекта файл mybmp.bmp запихивается в файл ресурса и цепляется к екзешнику.
2.
А рисовать ее можно и по WM_PAINT, однако, если картинку надо использовать как фон, то есть сообщение WM_CTLCOLORDLG, в ответ на которое нужно возвращать HBRUSH кисти, созданной из вашей картинки.
← →
DVM (2003-12-21 13:07) [5]Вобщем основная последовательность такова.
1) Подготовить Bitmap на диске.
2) Подгрузить его с пом. LoadBitmap()
3) Создать функцию отрисовки битмапа по его HBitmap;
Пример:
void DrawBitmap(HDC hdc, HBITMAP hBMP, int x, int y)
{
BITMAP bm;
HDC hdcMem;
POINT ptSize, ptOrg;
hdcMem=CreateCompatibleDC(hdc);
SelectObject(hdcMem,hBMP);
SetMapMode(hdcMem,GetMapMode(hdc));
GetObject(hBMP,sizeof(BITMAP),(LPVOID)&bm);
ptSize.x=bm.bmWidth;
ptSize.y=bm.bmHeight;
DPtoLP(hdc,&ptSize,1);
ptOrg.x=0;
ptOrg.y=0;
DPtoLP(hdcMem,&ptOrg,1);
BitBlt(hdc,x,y,ptSize.x,ptSize.y,
hdcMem,ptOrg.x,ptOrg.y,SRCCOPY);
DeleteDC(hdcMem);
}
4) В обработчике WM_PAINT получить DC и отрисовыть битмап
5) Не забыть выгрузить битмап по окончании работы программы.
← →
deema (2003-12-25 19:32) [6]А еще, вроде бы при описании класса окна, которое хотим создавать, можно задать кисть для раскраски ее в
hbrBackground := CreatePatternBrush(...); // или подобные функции
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c