Avatar billede bjering Nybegynder
12. juni 2006 - 19:59 Der er 35 kommentarer og
1 løsning

disable 3d border på webbrowser activex plugin

Hejsa Eksperter.

Har et program som ser sådan her ud :

http://www.freeplay.dk/myprog.jpg

nu er problemet bare, at i min activex plugin (microsoft webbrowser) er der en 3d border omkring (som kan ses på billedet i den sorte boks, den grå linie omkring boksen).

den vil jeg gerne have v©¡k :)

er der nogen der kan fort©¡lle mig hvordan ?

l©¡ste noget om mshtml.dll og jeg har da også added den til min program, men så står der også noget om IDocHostUIHandler og en masse andet jeg ikke fatter en disse af.

nogen der kan give mig en hurtig ide eller kode til at fjerne den border ?

På forhånd tak :)
Avatar billede bertelbrander Novice
12. juni 2006 - 20:02 #1
Det jeg ved om web-ctrl's kan læses her:

http://home20.inet.tele.dk/midgaard/sample.html#webctrl

Måske kan det bruges.
Avatar billede bjering Nybegynder
12. juni 2006 - 20:32 #2
hjalp ikk meget.

btw, det er et mfc program, og jeg kalder hjemmesiden sådan :

    COleVariant varEmpty;
    m_wb.Navigate("http://updater.freeplay.dk",
                  &varEmpty,
                  &varEmpty,
                  &varEmpty,
                  &varEmpty);

jeg ved ikke rigtig hvordan jeg skal forklare det :P, det er dog først når siden er "hentet" den der 3d border kommer frem.
Avatar billede bjering Nybegynder
12. juni 2006 - 20:35 #3
dumme M$, de kunne da godt have lavet en m_wb.ShowBorder(false); eller noget.

men neeeeej, men skal lave 1000000000000000000000000000000000 linier code for at fjerne den.
Avatar billede bertelbrander Novice
12. juni 2006 - 20:53 #4
Så vidt jeg kan se er CHtmlView et CView som er et CWnd.
CWnd har en m_hWnd, der er en almindelig HWND.
Og så kan man måske bruge SetWindowLong med GWL_STYLE eller GWL_EXSTYLE for at fjerne 3d-stylen.
Avatar billede bjering Nybegynder
12. juni 2006 - 23:28 #5
det kan jeg ikke lige se kan lade sig gøre.

hmmm
Avatar billede bertelbrander Novice
12. juni 2006 - 23:32 #6
Hvorfor ikke?
Du burde kunne kalde GetWindowLong for at få ex-style og maske borderen af og så kalde SetWindowLong for at sætte den.
Avatar billede bjering Nybegynder
12. juni 2006 - 23:45 #7
du mener noget med

    DWORD dwStyle = GetWindowLong(m_wb, GWL_EXSTYLE);
    SetWindowLong(m_wb, GWL_EXSTYLE, dwStyle|WS_BORDER);

?

eller... lol, sorry jeg er lidt confus efter at have læst 100 sider omkring det med IDocHostUIHandler som jeg STADIG ikke fatter...
Avatar billede bertelbrander Novice
12. juni 2006 - 23:50 #8
dwStyle & ~WS_BORDER

WS_BORDER  er en (normal) style, dvs. du skal bruge GWL_STYLE
Det er muligvis WS_EX_CLIENTEDGE du skal have fat i, det er en ex-style, dvs. GWL_EXSTYLE
Avatar billede bjering Nybegynder
13. juni 2006 - 00:15 #9
med

    // set browser border
    int exStyle = GetWindowLong(m_wb , GWL_EXSTYLE);
    exStyle = exStyle | WS_EX_CLIENTEDGE;
    SetWindowLong(m_wb, GWL_EXSTYLE, exStyle);

er der stadig en border, men den rykker sig længere "ind".

http://www.freeplay.dk/myprog1.jpg

(ps. navnet der er bare noget jeg smed ind for at teste font :D)
Avatar billede bertelbrander Novice
13. juni 2006 - 00:24 #10
Du skal fjerne flaget, så det er ikke | men &:

exStyle = exStyle & (~WS_EX_CLIENTEDGE);
Avatar billede bjering Nybegynder
13. juni 2006 - 00:26 #11
med den code, laver jeg egentlig ikke bare en border omkring min activex applet der er inde i programmet (microsoft webbrowser) og det er derfor den rykker sig "ind" ?

borderen er vidst en del af microsoft activex webbrowser tingen, tror ikke man kan fjerne den uden IDocHostUIHandler tingen (men er self ikke sikker, kan godt være din idé virker på en eller anden måde :) )
Avatar billede bjering Nybegynder
13. juni 2006 - 00:28 #12
// set browser border
    int exStyle = GetWindowLong(m_wb , GWL_EXSTYLE);
    exStyle = exStyle & (~WS_EX_CLIENTEDGE);
    SetWindowLong(m_wb, GWL_EXSTYLE, exStyle);

stadig border som på første billede :)

hmm måske det er med WS_BORDER, det er jo en 3d border.. ved snart ikke :P, prøver lige WS_BORDER
Avatar billede bjering Nybegynder
13. juni 2006 - 00:28 #13
nops :D
Avatar billede bertelbrander Novice
13. juni 2006 - 00:44 #14
Du kunne prøve at køre EnumChildWindows (rekursivt) for at se om du ad den vej kan finde det vindue for hvilket du skal have sat style/ex-style.
Avatar billede bjering Nybegynder
13. juni 2006 - 00:46 #15
det skal lige siges at den der code virker fint på f.eks en process bar osv.

men ikke på den activex plugin
Avatar billede bjering Nybegynder
13. juni 2006 - 17:06 #16
det kan jeg ikke få til at virke, har dog heller aldrig brugt EnumChildWindows før.

nogen eksempel på hvordan man skriver det ind ?
Avatar billede bertelbrander Novice
13. juni 2006 - 19:24 #17
Et eksempel der udskriver teksten for alle vinduer der er undervinduer af den nuværende desktop (der er mange):

#include <iostream>
#include <windows.h>

BOOL CALLBACK EnumChildProc(HWND aWnd, LPARAM)
{
  char Text[1024] = "";
  GetWindowText(aWnd, Text, sizeof(Text));
  if(Text[0])
  {
      std::cout << "Title: " << Text << std::endl;
  }
  EnumChildWindows(aWnd, EnumChildProc, 0);
  return TRUE;
}

int main()
{
  EnumChildWindows(GetDesktopWindow(), EnumChildProc, 0);
}

Du skal erstatte GetDesktopWindow() med handlen på dit CHtmlView.
Håbet er at du derved kan få fat i det vindue som du skal modificere style for.
Avatar billede bjering Nybegynder
14. juni 2006 - 20:44 #18
hmm det kan jeg ik lige få til at virke.

men jeg forstår bare ikke, for efter hvad jeg læser på MSDN så kan man KUN fjerne den 3d border omkring vinduet i en .net application via IDocHostUIHandler.

Jeg bruger MS Visual Studio .net 2003, min app. er en MFC application .exe, og jeg har smidt webbrowser in via activex control.

måske jeg kan pakke den ned og smide en link op til sourcen så kan du da selv tjekke det ?
Avatar billede bertelbrander Novice
14. juni 2006 - 21:27 #19
Hvad mener du med at du ikke kan få det til at virke?

Jeg har kun MS VC 6.0 pt, så jeg kan måske ikke liget teste det. Men hvis du kun bruger mfc og ikke .net kan jeg måske få det til at virke. Du må gerne sende koden.
Avatar billede bjering Nybegynder
14. juni 2006 - 22:47 #20
okay den ligger her.

http://www.freeplay.dk/Beta4.rar

koden er måske en smule rodet :D, men havde tænkt mig at rydde lidt op efter jeg havde min UI til at virke.
Avatar billede bjering Nybegynder
14. juni 2006 - 22:51 #21
Avatar billede bertelbrander Novice
14. juni 2006 - 22:57 #22
Jeg prøver at kikke på det.
Først skal jeg lige se om jeg kan få Visual Studio 8.0 Express op & køre igen.
Avatar billede bjering Nybegynder
14. juni 2006 - 22:59 #23
Lyder super :)

vil tjekke herind konstant :P
Avatar billede bertelbrander Novice
15. juni 2006 - 00:58 #24
Jeg har fået det compileret men har ikke fundet en løsning på problemet :-(
Jeg har ikke rigtig flere ideer nu, men prøver at rode videre med det i morgen.
Avatar billede bjering Nybegynder
15. juni 2006 - 02:24 #25
okay :)
Avatar billede bjering Nybegynder
15. juni 2006 - 22:42 #26
Har selv sat og læse en hel bunke nu, har heller ikke fundet nogen løsning endnu.

Øv øv....
Avatar billede bjering Nybegynder
16. juni 2006 - 00:57 #27
har læst disse som måske var noget..

http://support.microsoft.com/default.aspx?scid=kb;en-us;324419
http://support.microsoft.com/kb/196835/EN-US/

men jeg kan ik få det til at virke også..
Avatar billede bertelbrander Novice
16. juni 2006 - 01:07 #28
Den første ser ellers ud til at kunne være interessant, men jeg er ikke sikker på at det er den border.

Har du prøvet at sende en besked til dialogbox'en og starte navigering derfra?
Avatar billede bjering Nybegynder
16. juni 2006 - 01:17 #29
fra første:
-----------------------
Remove the Border
To remove the borders, use one of following methods:
• Post a user-defined message, and then perform the navigation in the user-defined message handler.
• Follow the steps in Microsoft Knowledge Base article Q196835 to provide the custom control site in which you can add the IDocHostUIHandler interface. For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
196835 (http://support.microsoft.com/kb/196835/EN-US/) HOWTO: Override the MFC Default Control Containment

After you implement all the functions, you must add DOCHOSTUIFLAG_NO3DBORDER to the DOCHOSTUIINFO stucture in the dwFlags field for the GetHostInfo method. It is beyond the scope of this article to provide the steps to implement IDocHostUIHandler.

NOTE: The border problem does not appear in an Active Template Library (ATL) container because the ATL class, CAxHostWindow, already implements the IDocHostUIHandler interface. By default, CAxHostWindow enables this flag.
----------------

Men det kan jeg ikke få til at funke (kan ikke hitte ud af at overwrite den).

Og ja, jeg har prøvet det andet.
Avatar billede bjering Nybegynder
16. juni 2006 - 01:19 #30
btw, den laver den border ved OnNavigateComplete.

dvs, man skal fjerne border efter hvad jeg kan læse mig til ved enten OnNavigateComplete eller OnBeforeNavigate.
Avatar billede bjering Nybegynder
16. juni 2006 - 01:21 #31
how nej,

Post a user-defined message, and then perform the navigation in the user-defined message handler.

det har jeg vidst ikke prøvet (har prøvet 100 ting, kan ikke hitte ud af det mere snart lol).
Avatar billede bjering Nybegynder
16. juni 2006 - 18:41 #32
nå, men har stadig ikke fået det til at virke..
Avatar billede bertelbrander Novice
18. juni 2006 - 00:38 #33
Jeg kan ikke få det til at virke :-(
Jeg har desværre ikke flere ideer.
Avatar billede bjering Nybegynder
18. juni 2006 - 16:20 #34
okay, jeg har fået det til at virke, og skriver her hvordan til andre også.

først, du kan ikke bruge MS win2003 SDK 1, du skal opdatere til MS win2003 sdk rev 2.

derefter skal du bare gøre som i :

http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/browser/driller/default.asp

og så er din border væk :)

grunden til du ikke kan bruge rev 1 af sdk er der er en masse fejl i de filer du skal bruge.

ps brug :

#if (_MFC_VER < 0x0700)
#include <..\src\occimpl.h> // For COccManager
#else
#include <afxocc.h>
#endif

i stedet for

#include <..\src\occimpl.h> i de filer der har den included.

----

nå, men bertel, nu kom du jo egentlig ikke med noget der virkede, dog kom du med lidt kode jeg godt kan bruge til andet, og du har jo også prøvet hårdt :)

skal vi sige vi splitter puljen lige over ? :)

hvis du har løst, kan du bare smide et svar.
Avatar billede bertelbrander Novice
18. juni 2006 - 20:46 #35
Jeg samler ikke på point.
Avatar billede bjering Nybegynder
18. juni 2006 - 23:09 #36
okay, men tak alligevel :)
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