Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[BC++] StayOnTop probleempje

Pagina: 1
Acties:
  • 298 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,


Ik heb de SDR ontvanger van Elektuur gekocht en nu probeer ik een DLL te schrijven om deze ontvanger aan WinRad te koppelen. Functioneel werkt dit, ik zit echter nog met een paar cosmetische uitdagingen.

Als ik het controle paneel als formstyle "fsStayOnTop" geef, dat staat deze ook echt "OnTop", ook wanneer WinRad niet het active venster is, dat is erg irritant.

Als ik het controle paneel als "fsNormal" definieer dan verdwijnt deze om de haverklap naar de achtergrond en moet ik deze weer terug halen met de speciale toets hiervoor in WinRad (H-toets).

Als ik hem als een "fsMDIChild" definieer, dan krijg ik een runtime error dat de MDIParent niet gevonden wordt.

Ik wil dus graag dat mijn controle paneel (gedefinieerd als een TForm) "OnTop" blijft in het hoofdwindow van WinRad en niet op mijn gehele desktop. Ik zit al een poosje te zoeken naar een oplossing voor dit probleem maar heb tot nu toe niets kunnen vinden, daarom wend ik me nu maar tot de guru's alhier. Ik beschik dus alleen over een API voor een uitbreidings DLL van WinRad en heb geen inzage in de code van WinRad zelf.

PS, de DLL maak ik in C++ Builder.

Gert Jan.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 23:11

Klippy

Still Game

Zoek eens op iets van Modal Window.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Topicstarter
Oke, maar om een modal dialog te maken van het control panel heb ik de HWND pointer naar het parentwindow nodig en die wordt niet doorgegeven aan de DLL door WinRad. Of begrijp ik het nu verkeerd?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Klippy schreef op dinsdag 25 september 2007 @ 22:07:
Zoek eens op iets van Modal Window.
Een modal window dwingt je om interactie aan te gaan binnen dat window; dat zou betekenen dat de rest van het programma "onbedienbaar" is.
Verwijderd schreef op dinsdag 25 september 2007 @ 22:02:
Als ik hem als een "fsMDIChild" definieer, dan krijg ik een runtime error dat de MDIParent niet gevonden wordt.
Je kunt de MDIParent lijkt me wel setten? In dat geval vraag je gewoon de hWnd van het venster op dat je als parent wil designeren en (even uit de blote bol) een SetParent-call later heb je een MDI child. Zie ook (even googlen :P ) hier en de rest.
Verwijderd schreef op dinsdag 25 september 2007 @ 22:02:
Ik heb de SDR ontvanger van Elektuur <snip>
ook wanneer WinRad niet het active venster is <snip>
Je gaat er wel héél makkelijk van uit dat iedereen weet wat de "SDR" is en wat "WinRad" is. Wellicht volgende keer iets meer uitwijden hierover, of wat relevante linkjes erbij plaatsen? Ik moest in ieder geval even googlen voordat ik ontdekte dat SDR Software Defined Radio is en dat WinRad een (ontzettend faudt :P ) stukje software is wat dus dient als "host" voor je SDR?

[ Voor 103% gewijzigd door RobIII op 25-09-2007 23:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op dinsdag 25 september 2007 @ 23:26:
Je kunt de MDIParent lijkt me wel setten? In dat geval vraag je gewoon de hWnd van het venster op dat je als parent wil designeren en (even uit de blote bol) een SetParent-call later heb je een MDI child. Zie ook (even googlen :P ) hier en de rest.
Oke, Dat hele verhaal over het zetten van de parent heb ik inderdaad ook gevonden maar ik weet dus niet waar ik de hWnd van het main scherm vandaan kan toveren. Ik heb wel ondekt hoe ik de hInstance van de main applicatie kan opvragen (getInstance van het adres van de callback routine doen) maar hoe ik van hInstance naar hWnd kom is mij nog duister.
RobIII schreef op dinsdag 25 september 2007 @ 23:26:
Je gaat er wel héél makkelijk van uit dat iedereen weet wat de "SDR" is en wat "WinRad" is. Wellicht volgende keer iets meer uitwijden hierover, of wat relevante linkjes erbij plaatsen? Ik moest in ieder geval even googlen voordat ik ontdekte dat SDR Software Defined Radio is en dat WinRad een (ontzettend faudt :P ) stukje software is wat dus dient als "host" voor je SDR?
Oke sorry hiervoor, het leek mij ook niet direct ter zaken doende voor de vraag maar ik kan me voorstellen dat mensen dat graag willen weten.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 23:11

Klippy

Still Game

RobIII schreef op dinsdag 25 september 2007 @ 23:26:
[...]

Een modal window dwingt je om interactie aan te gaan binnen dat window; dat zou betekenen dat de rest van het programma "onbedienbaar" is.

[...]
En zoals ik het lees is dat ook de bedoeling, maar blijkbaar niet dus :P

Het gaat dus om 2 apate applicaties die je eigenlijk bij elkaar wil laten horen?
Volgens mij kan je dan ook gewoon de owner van je nieuwe scherm wijzigen naar het hoofdscherm en niet de parent. Parent blijft de Desktop.

Maar misschien snap ik niet wat je precies wil :P

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Topicstarter
Klippy schreef op woensdag 26 september 2007 @ 18:17:
Het gaat dus om 2 apate applicaties die je eigenlijk bij elkaar wil laten horen?
Volgens mij kan je dan ook gewoon de owner van je nieuwe scherm wijzigen naar het hoofdscherm en niet de parent. Parent blijft de Desktop.

Maar misschien snap ik niet wat je precies wil :P
De bedoeling is dat het controle paneel in het zicht blijft in de hoofd applicatie maar niet dat hij de werking van de hoofdapplicatie blokkeert. Het is mijn bedoeling om uiteindelijk het controle paneel frameless te maken met een transparante achtergrond waardoor het een geheel gaat vormen met de hoofd applicatie.

Speurwerk middels google ne jullie aanwijzingen heeft mij iig een routine opgeleverd welke de hWnd van het hoofdscherm retourneert. Ik heb gepoogd om deze als MdiParent te zetten op het controle paneel maar dan krijg ik de melding dat dit geen propertie van TForm is. :?


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
HWND FindParentHandle()
{
  HWND hwndNext, hWindow = NULL;
  DWORD dwID, dwIDWe;

  /* find window */
  dwIDWe = GetCurrentProcessId();
  hwndNext = GetWindow(GetDesktopWindow(), GW_CHILD);
  while (hwndNext != NULL)
  {
    GetWindowThreadProcessId(hwndNext, &dwID);

    if( dwID == dwIDWe )
    {
      hWindow = hwndNext;
      break;
    }

    hwndNext = GetWindow(hwndNext, GW_HWNDNEXT);
  }

  /* find parent */
  if( hWindow )
  {
    hwndNext = hWindow;
    while( hWindow )
      hWindow = GetWindow(hWindow, GW_OWNER);

    if( !hWindow )
      hWindow = hwndNext;
  }

  return hWindow;
}
Pagina: 1