Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

Получить Handle без Application   Найти похожие ветки 

 
MScorp   (2003-12-26 17:34) [0]

у меня проект, в который не хотелось бы добавлять форму и Application, но Handle нужен, для нормальной работы иконке в трее. Сразу оговорюсь, что это не троян, это мой резидент/драйвер для работы ДУ через COM-порт


 
alex_*** ©   (2003-12-26 17:45) [1]

Handle модуля: hInstance.


 
jack128 ©   (2003-12-26 17:47) [2]

создать окно на апи, если с Forms связоваться не хочешь..С Сети примров навалом...


 
alex_*** ©   (2003-12-26 17:50) [3]

в rx есть компонент для tray, где создается свое невидимое окно, которое ловит сообщения от tray


 
MScorp   (2003-12-26 18:10) [4]

а если без создания окна и без компонента?
как-то можно?


 
jack128 ©   (2003-12-26 18:36) [5]

>>а если без создания окна
никак.


 
Zelius ©   (2003-12-26 18:44) [6]

Можно, есть такая ф-ия
function AllocateHWnd(Method: TWndMethod): HWND;
живет в Classes (ее только в D7 туда перенесли, за что огромное им спасибо!). ТТАймер работает через нее.
Я через нее же делал консольное приложение, которое отображает иконку в трее с возможностью скрыть консоль по дабл клику.


 
jack128 ©   (2003-12-26 18:50) [7]


> Можно, есть такая ф-ия
> function AllocateHWnd(Method: TWndMethod): HWND;
> живет в Classes

угу, в пятерке в Forms она живет. Эта функция как раз и создает окно...


 
Юрий Зотов ©   (2003-12-26 23:25) [8]

> MScorp (26.12.03 18:10) [4]

> а если без создания окна
Никак. Должно быть окно, чья оконная функция будет получать сообщения "от иконки". Обычно оно невидимое, но без него - никак. Иначе как же обрабатывать эти сообщения? Сама структура NOTIFYICONDATA заточена именно под окно, и ничего уж тут не поделаешь.

> и без компонента?
А вот это запросто. См. [2].


 
Mystic ©   (2003-12-27 11:54) [9]

Вот пример из MSDN окна на чистом API.

Как видишь, не так уж много. Рекомендую перевести на Delphi, заставь работать... Потом выкинуть ShowWindow и UpdateWindow и наращивать функциональность: проинициализировать иконку в трее, внутри MainWndProc обрабатывать сообщения, ...

#include <windows.h>

// Global variable

HINSTANCE hinst;

// Function prototypes.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Application entry point.

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;

if (!InitApplication(hinstance))
return FALSE;

if (!InitInstance(hinstance, nCmdShow))
return FALSE;

while (GetMessage(&msg, (HWND) NULL, 0, 0) != 0 && GetMessage(&msg, (HWND) NULL, 0, 0) != -1)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(lpCmdLine);
}

BOOL InitApplication(HINSTANCE hinstance)
{
WNDCLASSEX wcx;

// Fill in the window class structure with parameters
// that describe the main window.

wcx.cbSize = sizeof(wcx); // size of structure
wcx.style = CS_HREDRAW |
CS_VREDRAW; // redraw if size changes
wcx.lpfnWndProc = MainWndProc; // points to window procedure
wcx.cbClsExtra = 0; // no extra class memory
wcx.cbWndExtra = 0; // no extra window memory
wcx.hInstance = hinstance; // handle to instance
wcx.hIcon = LoadIcon(NULL,
IDI_APPLICATION); // predefined app. icon
wcx.hCursor = LoadCursor(NULL,
IDC_ARROW); // predefined arrow
wcx.hbrBackground = GetStockObject(
WHITE_BRUSH); // white background brush
wcx.lpszMenuName = "MainMenu"; // name of menu resource
wcx.lpszClassName = "MainWClass"; // name of window class
wcx.hIconSm = LoadImage(hinstance, // small class icon
MAKEINTRESOURCE(5),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);

// Register the window class.

return RegisterClassEx(&wcx);
}

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)
{
HWND hwnd;

// Save the application-instance handle.

hinst = hinstance;

// Create the main window.

hwnd = CreateWindow(
"MainWClass", // name of window class
"Sample", // title-bar string
WS_OVERLAPPEDWINDOW, // top-level window
CW_USEDEFAULT, // default horizontal position
CW_USEDEFAULT, // default vertical position
CW_USEDEFAULT, // default width
CW_USEDEFAULT, // default height
(HWND) NULL, // no owner window
(HMENU) NULL, // use class menu
hinstance, // handle to application instance
(LPVOID) NULL); // no window-creation data

if (!hwnd)
return FALSE;

// Show the window and send a WM_PAINT message to the window
// procedure.

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
return TRUE;

}

LRESULT CALLBACK MainWndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam) // second message parameter
{

switch (uMsg)
{
case WM_CREATE:
// Initialize the window.
return 0;

case WM_PAINT:
// Paint the window"s client area.
return 0;

case WM_SIZE:
// Set the size and position of the window.
return 0;

case WM_DESTROY:
// Clean up window-specific data objects.
return 0;

//
// Process other messages.
//

default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
3-37548
SergP
2003-12-17 12:53
2004.01.13
Проблема с вычисляемыми полями в SQL запросе


3-37540
napik
2003-12-16 08:47
2004.01.13
halycon


4-37987
Дремучий
2003-11-10 20:00
2004.01.13
Горячие клавиши! Глобально. Для операционки.


11-37589
Ал
2003-04-24 13:07
2004.01.13
Работа с ActiveDesktop через CreateComObject (KOLComObj)


14-37885
AlexCo
2003-12-22 13:38
2004.01.13
Как Проиграть звук из ресурса!!!!