Alexander Nicolaysen Sørnes : shdocvw: Add a toolbar to IE.

Alexandre Julliard julliard at winehq.org
Tue Aug 3 13:10:37 CDT 2010


Module: wine
Branch: master
Commit: 5d7c46096222b2f1c78c450defb0558eb29559b0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5d7c46096222b2f1c78c450defb0558eb29559b0

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Tue Aug  3 12:36:30 2010 +0200

shdocvw: Add a toolbar to IE.

---

 dlls/shdocvw/En.rc      |   10 ++++++++
 dlls/shdocvw/iexplore.c |   58 +++++++++++++++++++++++++++++++++++++++++++---
 dlls/shdocvw/resource.h |    8 ++++++
 3 files changed, 72 insertions(+), 4 deletions(-)

diff --git a/dlls/shdocvw/En.rc b/dlls/shdocvw/En.rc
index 0c70851..ee6e378 100644
--- a/dlls/shdocvw/En.rc
+++ b/dlls/shdocvw/En.rc
@@ -60,3 +60,13 @@ IDR_BROWSE_MAIN_MENU MENU
         MENUITEM "&About Internet Explorer...", ID_BROWSE_ABOUT
     }
 }
+
+STRINGTABLE
+{
+    IDS_TB_BACK             "Back"
+    IDS_TB_FORWARD          "Forward"
+    IDS_TB_STOP             "Stop"
+    IDS_TB_REFRESH          "Refresh"
+    IDS_TB_HOME             "Home"
+    IDS_TB_PRINT            "Print"
+}
diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c
index c934753..a908744 100644
--- a/dlls/shdocvw/iexplore.c
+++ b/dlls/shdocvw/iexplore.c
@@ -319,10 +319,39 @@ static void ie_dialog_about(HWND hwnd)
     DestroyIcon(icon);
 }
 
+static void add_tb_separator(HWND hwnd)
+{
+    TBBUTTON btn;
+
+    ZeroMemory(&btn, sizeof(btn));
+
+    btn.iBitmap = 3;
+    btn.fsStyle = BTNS_SEP;
+    SendMessageW(hwnd, TB_ADDBUTTONSW, 1, (LPARAM)&btn);
+}
+
+static void add_tb_button(HWND hwnd, int bmp, int cmd, int strId)
+{
+    TBBUTTON btn;
+    WCHAR buf[30];
+
+    LoadStringW(shdocvw_hinstance, strId, buf, sizeof(buf)/sizeof(buf[0]));
+
+    btn.iBitmap = bmp;
+    btn.idCommand = cmd;
+    btn.fsState = TBSTATE_ENABLED;
+    btn.fsStyle = BTNS_SHOWTEXT;
+    btn.dwData = 0;
+    btn.iString = (INT_PTR)buf;
+
+    SendMessageW(hwnd, TB_ADDBUTTONSW, 1, (LPARAM)&btn);
+}
+
 static void create_rebar(HWND hwnd)
 {
     HWND hwndRebar;
     HWND hwndAddress;
+    HWND hwndToolbar;
     REBARINFO rebarinf;
     REBARBANDINFOW bandinf;
     WCHAR addr[] = {'A','d','d','r','e','s','s',0};
@@ -336,16 +365,37 @@ static void create_rebar(HWND hwnd)
 
     SendMessageW(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rebarinf);
 
+    hwndToolbar = CreateWindowExW(TBSTYLE_EX_MIXEDBUTTONS, TOOLBARCLASSNAMEW, NULL, TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwndRebar, (HMENU)IDC_BROWSE_TOOLBAR, shdocvw_hinstance, NULL);
+
+    SendMessageW(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
+    add_tb_button(hwndToolbar, I_IMAGENONE, 0, IDS_TB_BACK);
+    add_tb_button(hwndToolbar, I_IMAGENONE, 0, IDS_TB_FORWARD);
+    add_tb_button(hwndToolbar, I_IMAGENONE, 0, IDS_TB_STOP);
+    add_tb_button(hwndToolbar, I_IMAGENONE, 0, IDS_TB_REFRESH);
+    add_tb_button(hwndToolbar, I_IMAGENONE, 0, IDS_TB_HOME);
+    add_tb_separator(hwndToolbar);
+    add_tb_button(hwndToolbar, I_IMAGENONE, ID_BROWSE_PRINT, IDS_TB_PRINT);
+    SendMessageW(hwndToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(50,40));
+    SendMessageW(hwndToolbar, TB_AUTOSIZE, 0, 0);
+
+    bandinf.cbSize = sizeof(bandinf);
+    bandinf.fMask = RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
+    bandinf.fStyle = RBBS_CHILDEDGE;
+    bandinf.cx = 100;
+    bandinf.cyMinChild = 42;
+    bandinf.hwndChild = hwndToolbar;
+
+    SendMessageW(hwndRebar, RB_INSERTBANDW, -1, (LPARAM)&bandinf);
+
     hwndAddress = CreateWindowExW(0, WC_COMBOBOXEXW, NULL, WS_BORDER|WS_CHILD|WS_VISIBLE|CBS_DROPDOWN, 0, 0, 100,20,hwndRebar, (HMENU)IDC_BROWSE_ADDRESSBAR, shdocvw_hinstance, NULL);
 
-    bandinf.fMask = RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_TEXT;
-    bandinf.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;
+    bandinf.fMask |= RBBIM_TEXT;
+    bandinf.fStyle = RBBS_CHILDEDGE | RBBS_BREAK;
     bandinf.lpText = addr;
-    bandinf.cx = 100;
     bandinf.cyMinChild = 20;
     bandinf.hwndChild = hwndAddress;
 
-    SendMessageW(hwndRebar, RB_INSERTBANDW, 0, (LPARAM)&bandinf);
+    SendMessageW(hwndRebar, RB_INSERTBANDW, -1, (LPARAM)&bandinf);
 }
 
 static LRESULT iewnd_OnCreate(HWND hwnd, LPCREATESTRUCTW lpcs)
diff --git a/dlls/shdocvw/resource.h b/dlls/shdocvw/resource.h
index 898703c..3e497fe 100644
--- a/dlls/shdocvw/resource.h
+++ b/dlls/shdocvw/resource.h
@@ -27,6 +27,7 @@
 #define IDC_BROWSE_REBAR               1003
 #define IDC_BROWSE_ADDRESSBAR          1004
 #define IDC_BROWSE_STATUSBAR           1005
+#define IDC_BROWSE_TOOLBAR             1006
 
 #define ID_BROWSE_NEW_WINDOW           275
 #define ID_BROWSE_OPEN                 256
@@ -42,3 +43,10 @@
 
 #define ID_BROWSE_GOTOFAV_FIRST        2000
 #define ID_BROWSE_GOTOFAV_MAX          65000
+
+#define IDS_TB_BACK                    1100
+#define IDS_TB_FORWARD                 1101
+#define IDS_TB_STOP                    1102
+#define IDS_TB_REFRESH                 1103
+#define IDS_TB_HOME                    1104
+#define IDS_TB_PRINT                   1105




More information about the wine-cvs mailing list