Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// Dlg class.
//
// Provides some helper methods to resize a dialog window.
function Dlg() { this._cxPerEm = 1; this._cyPerEm = 1;
this._dxFrame = 0; this._dyFrame = 0; }
/*------------------------------------------------------------------------- Purpose: Calculates pixels-per-em metrics, based upon the given dialog size string ("dialogWidth:xxx; dialogHeight:yyy").
The body of the dialog requires a DIV with width and height set to 100%. This is needed so we can account for the frame of the dialog when we resize (client vs. window rect). */ function Dlg_CalcMetrics(szDlgSize, idDivDlg) { // There's a race condition where offsetHeight can change in the middle of this
// function if the content is greater than the window. So take a snapshot of it
// now.
var cxDiv = idDivDlg.offsetWidth; var cyDiv = idDivDlg.offsetHeight; var ichWidth = szDlgSize.indexOf("dialogWidth:") + 12; // 12 = cch of "dialogWidth:"
var ichHeight = szDlgSize.indexOf("dialogHeight:") + 13; // 13 = cch of "dialogHeight:"
var cxDlgEm = parseInt(szDlgSize.substring(ichWidth)); var cyDlgEm = parseInt(szDlgSize.substring(ichHeight));
/* alert('dialogWidth=' + window.dialogWidth + '; offsetWidth=' + cxDiv + '; clientWidth=' + idDivDlg.clientWidth + '\n' + 'dialogHeight=' + window.dialogHeight + '; offsetHeight=' + cyDiv + '; clientHeight=' + idDivDlg.clientHeight + '\n' + 'cxDlgEm=' + cxDlgEm + '; cyDlgEm=' + cyDlgEm); */ // dialogWidth is in pixels when read, but is in ems when written.
// The inconsistency amazes me...but I'll make use of that fact!
var cxWindow = parseInt(window.dialogWidth); // we expect this to be in pixels
var cyWindow = parseInt(window.dialogHeight); // we expect this to be in pixels
// We need to set the window size of the dialog, which is bigger than the client
// size. So calculate the difference so we can adjust the rectangle appropriately.
this._dxFrame = cxWindow - cxDiv; this._dyFrame = cyWindow - cyDiv; this._cxPerEm = cxWindow / cxDlgEm; this._cyPerEm = cyWindow / cyDlgEm; }
function Dlg_CxToEms(cx) { return cx / this._cxPerEm; }
function Dlg_CyToEms(cy) { return cy / this._cyPerEm; }
/*------------------------------------------------------------------------- Purpose: Resize the dialog to the given width and height (in pixels). */ function Dlg_Resize(cx, cy) { var cxNew = this.CxToEms(cx + this._dxFrame); var cyNew = this.CyToEms(cy + this._dyFrame); // Set the dialog size to entirely accomodate the contents of the dialog
/* alert('cx=' + cx + '; cxNew=' + cxNew + '; this._dxFrame=' + this._dxFrame + '\n' + 'cy=' + cy + '; cyNew=' + cyNew + '; this._dyFrame=' + this._dyFrame); */ // We cannot simply use the ResizeTo or ResizeBy methods because they don't
// work for dialog windows.
window.dialogWidth = cxNew; window.dialogHeight = cyNew; }
/*------------------------------------------------------------------------- Purpose: Initialize the Dlg class */ function InitDlgClass() { // Create and discard an initial Dlg object for prototypes
new Dlg();
// Dlg Methods
Dlg.prototype.CalcMetrics = Dlg_CalcMetrics; Dlg.prototype.Resize = Dlg_Resize; Dlg.prototype.CxToEms = Dlg_CxToEms; Dlg.prototype.CyToEms = Dlg_CyToEms; }
|