Unlike IE6, the window structure of IE7 has been greatly changed.
Ieframe (main window)
|
| -- Workerw (navigation bar, that is, the address bar, and the search bar unique to IE7)
|
| -- Rebarwindow32
|
| -- Commandbarclass
|
| -- Rebarwindow32
|
| -- Tabwindowclass (smaple: http://www.sina.com)
|
| -- Shell docobject View
|
| -- Internet assumer_server (browser window)
To support multiple pages, multiple tabwindowclass subwindows may exist in ieframe. Each tabwindowclass corresponds to a webpage.
There are three subwindows under the WorkerW-ReBarWindow32 (navigation bar:
Travelband, responsible for the toolbar section of the top left corner of IE7
Address band root, responsible for the address bar
Universalsearchband, responsible for the unique search bar of IE7
There are also level 1 to level 3 subwindows under these three subwindows, which are not listed one by one!
The CommandBarClass-ReBarWindow32 is responsible for the second line of the IE window, including favorites, tab, commonly used toolbar, etc.
There is also a big difference from previous versions, that is, the thread where the window is located.
Before IE6, other UI elements such as Internet assumer_server and toolbar were in the same thread. Therefore, when BHO is used, the thread is the same as the UI thread.
In IE7, each tabwindowclass/Internet assumer_server is in an independent thread and is separated from other UI threads of IE. Other UIS include:
Ieframe, workerw navigation bar, And commandbarclass (tab and common toolbar) are all in the same thread. Therefore, in IE7, if you want to hook the child or subclass the window in BHO, you should consider the cross-thread issue.