Avatar billede Lasse Novice
09. april 2002 - 17:15 Der er 16 kommentarer og
1 løsning

HTMLview

Jeg har oprettet et projekt vha. wizarden. Det er et Singledocument, mere specifikt et HTMLview. Selve HTML dokumentet som jeg har proppet ind i viewet er statisk(det vil altid vaere det HTML dokument). I dette HTML dok. fanger jeg nogle tastetryk(bla. F4, F5 osv). Idet det sker, skal jeg exite min C++ app. Det virker alt sammen, min c++ app fanger det jeg sender fra mit HTML dok.
MEN, idet jeg trykker paa caption baren i min C++ applikation, og trykker F4, F5 osv. saa har jeg ikke focus i mit HTML dok, og derfor sker der ikke det som jeg gerne vil.

Er det muligt at fange tastetrykkene i C++ app, og sende dem til mit HTMl view? Jeg havde forestillet mig noget lign dette, men det virker ikke:

CLortView::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_END) {
        CHtmlView::OnKeyUp(pMsg->wParam, 1, 15);
    }
}

Evt. er der en anden loesning paa mit problem?
Avatar billede laffe Nybegynder
09. april 2002 - 20:42 #1
Du har et Main-vindue, samt et child-vindue. Når du trykker på caption af dit main vindue, så er det main vinduet der har focus, og ikke dit child-vindue.

Er det det du mener der sker ?

Hvis jå:

Jeg mener at det burde være dit main vindue der hånterer evt. "kommando" tastetryk som f.eks. "Save" eller "Exit".
Avatar billede Lasse Novice
10. april 2002 - 00:08 #2
ja, det er det der sker... Child vinduet er tilfaeldigvis bare af typen HTMLview.

Men du har misforstaaet resten... Det jeg mener er at jeg UANSET hvorhenne jeg er i C++ applikationen(om fokus er i main vinduet eller i child vinduet), saa skal tastetryk blive "ledt ned i childvinduet".
Avatar billede laffe Nybegynder
10. april 2002 - 00:10 #3
Det mnå du så få Mainvinduet til at gøre. Lad Mainvinduet fange alle tastetryk, hvorefter du sender dem videre til det respektive child vindue.
Avatar billede laffe Nybegynder
10. april 2002 - 00:11 #4
HTMLView må være nedarvet af et vindue.
Avatar billede jpk Nybegynder
10. april 2002 - 13:04 #5
Kan du ikke fange disse events i din CMainFrame-nedarvede klasse?
Avatar billede Lasse Novice
10. april 2002 - 16:16 #6
jpk>> Jeg har proevet at fange dem i min CMainFrame-nedarvede klasse uden held.

Ok, jeg tror faktisk at der ligge en misforstaaelse - egentlig fordi jeg ikke har skrevet noget om det. Ved at jeg laver dette:

CLortView::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_END) {
        CHtmlView::OnKeyUp(pMsg->wParam, 1, 15);
    }
}

... fanger jeg alt - inklusiv tastetryk der bliver fyret af i Mainvinduet. Mit problem er at "sende det videre" til childvinduet.
Avatar billede laffe Nybegynder
10. april 2002 - 16:29 #7
Dit main vindue må have en liste over child vinduer ?

Så kan du tage "handlen" til child vinduet, og sende en WM_xx til det.

f.eks:  SendMessage(ChildVindue->Handle,WM_xxx,xx,xx);
Avatar billede Lasse Novice
10. april 2002 - 18:14 #8
Jeg har haevet point tallet til 50, idet jeg gerne vil have en fuldstaendig loesning...

Det du skriver laffe, er jo det jeg selv foreslaar, men jeg ved ikke hvordan man goer det... Hvordan faar jeg f.eks. ASCII vaerdieen(af tastetrykket) overfoert i SendMessage?
Avatar billede jpk Nybegynder
10. april 2002 - 19:25 #9
Forvirret...

Først skriver du at CLortView::PreTranslateMessage ikke virker, dernæst at den gør?
Avatar billede Lasse Novice
10. april 2002 - 20:36 #10
Naeee nej, forvirring over det hele...

Jeg fanger tastetrykkene vha. CLortView::PreTranslateMessage....

MEN

Idet jeg proever at sende tastetrykket videre ned i mit HTMLView

CHtmlView::OnKeyUp(pMsg->wParam, 1, 15);

sker der intet. Dette skal nok vaere a la SendMessage(params) istedet for.
Avatar billede laffe Nybegynder
11. april 2002 - 07:46 #11
Du skal ikke sende ascii tastetryk videre.

Du kan definere dine egne WM_xx Messages, som du sender fra MainWindow til ChildWindow.

Lad os Sige MainWindow har focus, og der trykkes på 'F5' (Kommando for save f.eks.). Denne fanger du. Nu kan du definere din egen WM_ Message
som fortæller ClientWindow, at den skal gemme HTML-dokumentet.

En ny Userdefined WM Message kunne være defineret på følgende måde:

#define WM_SAVE_MY_CLIENTWINDOWS    0x100000  // Unique værdi
wParam = Key; // Ascii taste tryk som ordinal værdi.
lParam = 0;  // parameter bruges ikke

F.Eks.:
SendMessage(ClientWindow->Handle,WM_SAVE_MY_CLIENTWINDOWS,0,0);


I dit ClientWindow fanger du så WM_SAVE_MY_CLIENTWINDOWS. Så ved du at der blev trykket på F5.
Avatar billede jpk Nybegynder
11. april 2002 - 08:12 #12
Har du 2 views? (CLortView og CHtmlView)

Har du ikke lavet en nedarving fra CHtmlView?
Avatar billede Lasse Novice
11. april 2002 - 17:12 #13
jo, det er nedarvning... Det er derfor jeg sender det videre vha. CHTMLView::OnKeyUp(pMsg->wParam, 1, 15);

Ok, jeg kigger lige paa det, men jeg tror nu stadig der ligger en misforstaaelse... Men det maa jeg lige se paa naar jeg kigger paa det.
Avatar billede Lasse Novice
19. april 2002 - 02:25 #14
laffe >> som sagt, der ligger en misforstaaelse. Mit problem er at jeg skal simulere det tastetryk som sker i min C++ applikation i mit HTML dokument(hvilke ligger i mit HTML view). Det hjaelper ikke noget at jeg sender en message til viewet. Jeg skal goere saaledes at HTML dokumentet faar det tastetryk.
Avatar billede jpk Nybegynder
07. maj 2002 - 10:18 #15
Hej gooky, jeg havde helt glemt dette spørgsmål...

Du kan evt. prøve at maile dit projekt til mig:
jacpost@post6.tele.dk
Avatar billede Lasse Novice
19. juni 2002 - 23:52 #16
lukker spg
Avatar billede jpk Nybegynder
20. juni 2002 - 07:53 #17
Har du fået løst problemet..?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester