我想改变 Firefox 的最小化/调整大小/最大化按钮的顺序,但不知道该怎么做。
看来userchrome.css
并没有什么帮助。
我可以定制它吗?
答案1
是的,在 DWM 禁用时可以更改三个标题按钮的顺序。但如果 DWM 启用,我们就无法更改顺序。
方法:
1)从 C:\Program Files (x86)\Mozilla Firefox\browser 复制 omni.ja
2)使用 zip 工具解压
3)编辑chrome\browser\content\browser下的browser.xul,改变以下内容的顺序
<hbox id="titlebar-buttonbox-container" align="start">
<hbox id="titlebar-buttonbox">
<toolbarbutton class="titlebar-button" id="titlebar-close" command="cmd_closeWindow"/>
<toolbarbutton class="titlebar-button" id="titlebar-max" oncommand="onTitlebarMaxClick();"/>
<toolbarbutton class="titlebar-button" id="titlebar-min" oncommand="window.minimize();"/>
</hbox>
标题栏的顺序变为:close->max->minimized
zip -qr9XD omni.ja *
4)在omni目录下使用命令重新打包omni.ja。
5)用新编辑的 omni.ja 替换旧的 omni.ja
6)最终结果:
解释:
1)Firefox的ui布局是基于xul(一种基于xml的布局描述语言)的,以browser.xul作为主浏览器ui的描述文件。
2)启用 DWM 后,Firefox 使用默认窗口过程(DefWindowProc)绘制非客户区,
case WM_NCPAINT:
{
/*
* Reset the non-client paint region so that it excludes the
* non-client areas we paint manually. Then call defwndproc
* to do the actual painting.
*/
if (!mCustomNonClient)
break;
// let the dwm handle nc painting on glass
if(nsUXThemeData::CheckForCompositor())
break;
HRGN paintRgn = ExcludeNonClientFromPaintRegion((HRGN)wParam);
LRESULT res = CallWindowProcW(GetPrevWindowProc(), mWnd,
msg, (WPARAM)paintRgn, lParam);
if (paintRgn != (HRGN)wParam)
DeleteObject(paintRgn);
*aRetValue = res;
result = true;
}
break;
因此,在启用 dwm 时无法自定义这三个按钮。