Customize webbrowser

B

badzio

Hi, is it possible to customize default webbrowser control?
Actually I want to change the color of scrollbar in this control.
How can I do it?
 
P

Paul G. Tobey [eMVP]

So, you've not told us 1) what version of Windows CE you are using or if you
are using Windows Mobile, 2) what browser you are using (the availability of
several depends on what version of CE, of course), 3) whether you are trying
to customize a binary version of the browser or if you have the source code,
4) whether you are willing to accept a change to the color of all scroll bars
as the price of changing the color of the one in your browser.

I will also ask, have you looked at WM_CTLCOLORSCROLLBAR?

Paul T.
 
B

badzio

So, you've not told us 1) what version of Windows CE you are using or if you
are using Windows Mobile,

Windows Mobile 6 (both profesional and standard)

2) what browser you are using (the availability of
several depends on what version of CE, of course), 3) whether you are trying
to customize a binary version of the browser or if you have the source code,

Sorry, not enough informations :)
I'm developing application in c# (CF .Net 2.0) on WM6 (pro/standard).
I'm using control System.Windows.Forms.WebBrowser so I don't have
sources of that.
4) whether you are willing to accept a change to the color of all scroll bars
as the price of changing the color of the one in your browser.

Yes if all scrollbars means all scrollbars only in my application
(probably next step will be changing scrollbar color in listview) :)
If all scrollbars in all applications that probably not but I can
consider that (workarround - changing default color for scrollbar when
my application get/lost focus).

Or maybe do you know any webbrowser control which I could use (LGPL or
similar license - I must use it in commercial application).
The best if it would be for free :)
I heard about resco controls but not sure if I can change colors there.
 
B

badzio

Windows Mobile 6 (both profesional and standard)

2) what browser you are using (the availability of


Sorry, not enough informations :)
I'm developing application in c# (CF .Net 2.0) on WM6 (pro/standard).
I'm using control System.Windows.Forms.WebBrowser so I don't have
sources of that.


Yes if all scrollbars means all scrollbars only in my application
(probably next step will be changing scrollbar color in listview) :)
If all scrollbars in all applications that probably not but I can
consider that (workarround - changing default color for scrollbar when
my application get/lost focus).

Or maybe do you know any webbrowser control which I could use (LGPL or
similar license - I must use it in commercial application).
The best if it would be for free :)
I heard about resco controls but not sure if I can change colors there.

I tried to put VScrollBar on the form and hide scrollbar included in
webbrowser. But I don't have access to webbrowser's scrollbars so I
cannot scroll the page, I don't know how big should scrollbar etc
 
P

Paul G. Tobey [eMVP]

Have you tried my other suggestion of using WM_CTLCOLORSCROLLBAR. It depends
on the parenting of the controls whether you can easily use this or not, of
course. If the Web browser control is the parent of the scroll bar, you might
try subclassing the Web browser window and taking over processing of
WM_CTLCOLORSCROLLBAR.

You can use Remote Spy to examine what windows belong to what parent windows
for your application...

Paul T.
 
B

badzio

Have you tried my other suggestion of using WM_CTLCOLORSCROLLBAR.  It depends
on the parenting of the controls whether you can easily use this or not, of
course. If the Web browser control is the parent of the scroll bar, you might
try subclassing the Web browser window and taking over processing of
WM_CTLCOLORSCROLLBAR.

You can use Remote Spy to examine what windows belong to what parent windows
for your application...

Paul T.

badzio said:
On 29 Gru, 20:21, Paul G. Tobey [eMVP] <paultobey _at_ earthlink _dot_
net> wrote:
So, you've not told us 1) what version of Windows CE you are using or if you
are using Windows Mobile,
Windows Mobile 6 (both profesional and standard)
2) what browser you are using (the availability of
several depends on what version of CE, of course), 3) whether you are trying
to customize a binary version of the browser or if you have the source code,
Sorry, not enough informations :)
I'm developing application in c# (CF .Net 2.0) on WM6 (pro/standard).
I'm using control System.Windows.Forms.WebBrowser so I don't have
sources of that.
4) whether you are willing to accept a change to the color of all scroll bars
as the price of changing the color of the one in your browser.
Yes if all scrollbars means all scrollbars only in my application
(probably next step will be changing scrollbar color in listview) :)
If all scrollbars in all applications that probably not but I can
consider that (workarround - changing default color for scrollbar when
my application get/lost focus).
Or maybe do you know any webbrowser control which I could use (LGPL or
similar license - I must use it in commercial application).
The best if it would be for free :)
I heard about resco controls but not sure if I can change colors there.
I tried to put VScrollBar on the form and hide scrollbar included in
webbrowser. But I don't have access to webbrowser's scrollbars so I
cannot scroll the page, I don't know how big should scrollbar etc
.

Not sure if understand properly. Scrollbar is part of WebBrowser
control (scrollbar is controled by webbrowser, I cannot check what's
the status of scroll, cannot set new position etc).
I've checked RemoteSpy - dependency is: "No name" (#NETCF_AGL_BASE)-
"No name" (#NETCF_AGL_BASE)->(...)->"No name" (#NETCF_AGL_CONTAINER)-
"No name" (IExplore)->{"No name" (MSPIE Status), "No name" (PIEHTML)}
Also is some window "No name" (Url Moniker Notification Window).
Also another window, related with my application but without childs
It's strange because WebBrowser is not separate application, it's a
control in my application, on Panel.
 
B

badzio

Have you tried my other suggestion of using WM_CTLCOLORSCROLLBAR.  It depends
on the parenting of the controls whether you can easily use this or not, of
course. If the Web browser control is the parent of the scroll bar, you might
try subclassing the Web browser window and taking over processing of
WM_CTLCOLORSCROLLBAR.

I've found that .Net CF doesn't allow to override WndProc. How to
solve that problem? :(
 
B

badzio

I've found that .Net CF doesn't allow to override WndProc. How to
solve that problem? :(

I've found some workarround for WndProc:
https://blogs.msdn.com/netcfteam/archive/2005/05/20/420551.aspx
and
https://blogs.msdn.com/netcfteam/archive/2005/05/20/420551.aspx
Also I've added WindowsMessages as mentioned in
http://social.msdn.microsoft.com/Fo...l/thread/211058d5-f052-49ef-aab5-38baf5b3703e

Following these articles I've created class WebBrowserEx:WebBrowser,
overrided method OnParentChanged and implemented method
WM_Notify_Handler.
But WM_Notify_Handler is never called :(
So I tried with ListView (because ListView is another control where I
must customize scrollbars).
And WM_NOTIFY_HANDLER is called many times. When listview is created
and when is scrolled. But nmHdr.code contains strange values - it's 0
or some big number, nothing similar to defined values.
Any help?
 
B

badzio

Actually, it is possible.  I've made a couple of previous posts about
it.  Seehttp://groups.google.com/group/microsoft.public.dotnet.framework.comp...
for one of them.

Yeah, I've found that (see my another post).
But for webbrowser event is never called :( for listview is called but
repainting doesn't work :(
case -177:
{
//IntPtr hdc = (IntPtr) wParam;
IntPtr hdc = hwnd;
Graphics g = Graphics.FromHdc(hdc);
//using (Graphics g = Graphics.FromHdc(hdc))
if (g != null)
{
System.Drawing.Brush brush;
brush = new System.Drawing.SolidBrush
(Color.Red);
g.FillRectangle(brush, 0, 0, 100, 100);
}

}
break;
(i've found that wm_ctlcolorscrollbar is -177, probably difference
between int and uint).
Graphics g = Graphics.FromHdc(hdc) - this line caused that event is
called again, line
if (g != null)
is never called
 
P

Paul G. Tobey [eMVP]

There's a scroll bar control on there somewhere, I think. If so, you should
be able to get its window handle and send that handle messages just like any
other window. As mentioned, find the window handle for the scroll bar and
subclass it is your best chance. If you can't make that work, the only way
I know to change the scroll color would be to change the global color
setting for scroll bars, all scroll bars, in all applications.

Paul T.

Have you tried my other suggestion of using WM_CTLCOLORSCROLLBAR. It
depends
on the parenting of the controls whether you can easily use this or not,
of
course. If the Web browser control is the parent of the scroll bar, you
might
try subclassing the Web browser window and taking over processing of
WM_CTLCOLORSCROLLBAR.

You can use Remote Spy to examine what windows belong to what parent
windows
for your application...

Paul T.

badzio said:
On 29 Gru, 20:21, Paul G. Tobey [eMVP] <paultobey _at_ earthlink _dot_
net> wrote:
So, you've not told us 1) what version of Windows CE you are using
or if you
are using Windows Mobile,
Windows Mobile 6 (both profesional and standard)
2) what browser you are using (the availability of
several depends on what version of CE, of course), 3) whether you
are trying
to customize a binary version of the browser or if you have the
source code,
Sorry, not enough informations :)
I'm developing application in c# (CF .Net 2.0) on WM6 (pro/standard).
I'm using control System.Windows.Forms.WebBrowser so I don't have
sources of that.
4) whether you are willing to accept a change to the color of all
scroll bars
as the price of changing the color of the one in your browser.
Yes if all scrollbars means all scrollbars only in my application
(probably next step will be changing scrollbar color in listview) :)
If all scrollbars in all applications that probably not but I can
consider that (workarround - changing default color for scrollbar when
my application get/lost focus).
Or maybe do you know any webbrowser control which I could use (LGPL or
similar license - I must use it in commercial application).
The best if it would be for free :)
I heard about resco controls but not sure if I can change colors
there.
I tried to put VScrollBar on the form and hide scrollbar included in
webbrowser. But I don't have access to webbrowser's scrollbars so I
cannot scroll the page, I don't know how big should scrollbar etc
.

Not sure if understand properly. Scrollbar is part of WebBrowser
control (scrollbar is controled by webbrowser, I cannot check what's
the status of scroll, cannot set new position etc).
I've checked RemoteSpy - dependency is: "No name" (#NETCF_AGL_BASE)-
"No name" (#NETCF_AGL_BASE)->(...)->"No name" (#NETCF_AGL_CONTAINER)-
"No name" (IExplore)->{"No name" (MSPIE Status), "No name" (PIEHTML)}
Also is some window "No name" (Url Moniker Notification Window).
Also another window, related with my application but without childs
It's strange because WebBrowser is not separate application, it's a
control in my application, on Panel.
 
P

Paul G. Tobey [eMVP]

It's not necessarily true that some particular event handler will work for a
WebBrowser control. Do what I suggested and properly subclass the control,
in C, if necessary, to familiarize yourself with what needs to be done.
Then port that code to managed code.

Paul T.

I've found that .Net CF doesn't allow to override WndProc. How to
solve that problem? :(

I've found some workarround for WndProc:
https://blogs.msdn.com/netcfteam/archive/2005/05/20/420551.aspx
and
https://blogs.msdn.com/netcfteam/archive/2005/05/20/420551.aspx
Also I've added WindowsMessages as mentioned in
http://social.msdn.microsoft.com/Fo...l/thread/211058d5-f052-49ef-aab5-38baf5b3703e

Following these articles I've created class WebBrowserEx:WebBrowser,
overrided method OnParentChanged and implemented method
WM_Notify_Handler.
But WM_Notify_Handler is never called :(
So I tried with ListView (because ListView is another control where I
must customize scrollbars).
And WM_NOTIFY_HANDLER is called many times. When listview is created
and when is scrolled. But nmHdr.code contains strange values - it's 0
or some big number, nothing similar to defined values.
Any help?
 
B

badzio

There's a scroll bar control on there somewhere, I think.  If so, you should
be able to get its window handle and send that handle messages just like any
other window.  As mentioned, find the window handle for the scroll bar and
subclass it is your best chance.  

Checked again. Remote spy doesn't find any scrollbar window for
listview and webbrowser. But if Form contains scrollbar than I can
find it in remote spy.
If you can't make that work, the only way
I know to change the scroll color would be to change the global color
setting for scroll bars, all scroll bars, in all applications.

Can I (from code, at runtime) change global color settings for
scrollbar? SystemColors (which contains default colors for all
controls, windows, elements) attributes are read only. I've found that
it's not possible to change SystemColors attributes and the only way
to customize is custom paiting
But for webbrowser webbrowser:
1) I'm not able to handle message WM_CTLCOLORSCROLLBAR
2) I don't have any information about scrolling, scrollbar's position
and size so I cannot manually paint the scrollbar rectangle
 
P

Paul G. Tobey [eMVP]

Try P/Invoking GetSysColor() and SetSysColors() for COLOR_SCROLLBAR to change
the colors for all scroll bars on the device.

I would try, as mentioned before in C, to handle the scrollbar control color
message by subclassing the browser window. While you're at it, you could
also handle it in the main window procedure. Maybe it ends up there...

Paul T.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top