Re: how to resize child window?

From: Jason Doucette (www.jasondoucette.com)
Date: 10/13/04


Date: Wed, 13 Oct 2004 09:25:11 -0300

I am not sure what the problem is, as I don't use C#, so I haven't looked at
your code. I do know that when you call the Win32 API function MoveWindow,
this does not change the focus of any window. So, resizing the child window
when the parent resizes should be fine...

---------
Jason Doucette
http://www.jasondoucette.com/

"assaf" <assafwo@hotmail.com> wrote in message
news:e66VKFRsEHA.1216@TK2MSFTNGP10.phx.gbl...
> hi all
>
> i set my window to be the parent of a 'Notepad' window.
> when the parent window's size is changed,
> i set the child winodow size as well.
>
> this causes the parent to lose focus,
> and the resizing stops after just changing a bit.
>
> what can i do in order to allow my window resizing
> to succeed?
>
>
> assaf
>
>
> here is my C#.NET code:
>
>
> using System;
> using System.Runtime.InteropServices;
> using System.Drawing;
> using System.Collections;
> using System.ComponentModel;
> using System.Windows.Forms;
> using System.Data;
>
> namespace Notepad
> {
> /// <summary>
> /// Summary description for Form1.
> /// </summary>
> public class Form1 : System.Windows.Forms.Form
> {
> private System.Windows.Forms.CheckBox checkBoxParent;
> private System.Windows.Forms.Button buttonFindWindow;
> private System.Windows.Forms.Label labelHwnd;
> /// <summary>
> /// Required designer variable.
> /// </summary>
> private System.ComponentModel.Container components = null;
>
> public Form1()
> {
> //
> // Required for Windows Form Designer support
> //
> InitializeComponent();
>
> //
> // TODO: Add any constructor code after InitializeComponent call
> //
> }
>
> /// <summary>
> /// Clean up any resources being used.
> /// </summary>
> protected override void Dispose( bool disposing )
> {
> if( disposing )
> {
> if (components != null)
> {
> components.Dispose();
> }
> }
> base.Dispose( disposing );
> }
>
> #region Windows Form Designer generated code
> /// <summary>
> /// Required method for Designer support - do not modify
> /// the contents of this method with the code editor.
> /// </summary>
> private void InitializeComponent()
> {
> this.checkBoxParent = new System.Windows.Forms.CheckBox();
> this.buttonFindWindow = new System.Windows.Forms.Button();
> this.labelHwnd = new System.Windows.Forms.Label();
> this.SuspendLayout();
> //
> // checkBoxParent
> //
> this.checkBoxParent.Location = new System.Drawing.Point(8, 40);
> this.checkBoxParent.Name = "checkBoxParent";
> this.checkBoxParent.TabIndex = 0;
> this.checkBoxParent.Text = "&Parent";
> this.checkBoxParent.CheckedChanged += new
> System.EventHandler(this.checkBoxParent_CheckedChanged);
> //
> // buttonFindWindow
> //
> this.buttonFindWindow.Location = new System.Drawing.Point(8, 8);
> this.buttonFindWindow.Name = "buttonFindWindow";
> this.buttonFindWindow.Size = new System.Drawing.Size(128, 23);
> this.buttonFindWindow.TabIndex = 1;
> this.buttonFindWindow.Text = "&Find Window";
> this.buttonFindWindow.Click += new
> System.EventHandler(this.buttonFindWindow_Click);
> //
> // labelHwnd
> //
> this.labelHwnd.Location = new System.Drawing.Point(144, 8);
> this.labelHwnd.Name = "labelHwnd";
> this.labelHwnd.TabIndex = 2;
> this.labelHwnd.Text = "0";
> //
> // Form1
> //
> this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
> this.ClientSize = new System.Drawing.Size(292, 273);
> this.Controls.Add(this.labelHwnd);
> this.Controls.Add(this.buttonFindWindow);
> this.Controls.Add(this.checkBoxParent);
> this.Name = "Form1";
> this.Text = "Form1";
> this.Resize += new System.EventHandler(this.Form1_Resize);
> this.ResumeLayout(false);
>
> }
> #endregion
>
> /// <summary>
> /// The main entry point for the application.
> /// </summary>
> [STAThread]
> static void Main()
> {
> Application.Run(new Form1());
> }
>
> [DllImport("user32")]
> private static extern
> int FindWindow(string lpClassName, int lpWindowName);
>
> [DllImport("user32")]
> private static extern
> int SetParent(int hWndChild, IntPtr hWndNewParent);
>
> [DllImport("user32")]
> private static extern
> bool SetWindowPos(
> int hWnd,
> int hWndInsertAfter,
> int X,
> int Y,
> int cx,
> int cy,
> uint uFlags
> );
>
> private void checkBoxParent_CheckedChanged(object sender,
> System.EventArgs
> e)
> {
> if(this.checkBoxParent.Checked == true)
> {
> int j = SetParent(this._hwnd, this.Handle);
> }
> else
> {
> int j = SetParent(this._hwnd, IntPtr.Zero);
> }
> }
>
> int _hwnd;
>
> private void buttonFindWindow_Click(object sender, System.EventArgs e)
> {
> this._hwnd = FindWindow("Notepad", 0);
> this.labelHwnd.Text = this._hwnd.ToString();
> }
>
> private void Form1_Resize(object sender, System.EventArgs e)
> {
> bool b = SetWindowPos(this._hwnd, 0, 0, 0, this.Width, this.Height, 0);
> if(b == false)
> {
> int hr = Marshal.GetHRForLastWin32Error();
> Marshal.ThrowExceptionForHR(hr);
> }
> this.Focus();
> }
> }
> }
>
>