Problem with dllimport code included .

G

Guest

Hi everyone,
Can you have a quick look and tell me why the caret is not shown , any help will be greatly appreicated
thank you.


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace test
{

public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;

private System.ComponentModel.Container components = null;

public Form1()
{

InitializeComponent();

}


protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code

private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(456, 240);
this.button1.Name = "button1";
this.button1.TabIndex = 2;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(456, 280);
this.button2.Name = "button2";
this.button2.TabIndex = 3;
this.button2.Text = "button2";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(616, 334);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion


[STAThread]
static void Main()
{
Application.Run(new Form1());
}

[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool SetCaretPos(int X, int Y);


[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool ShowCaret(IntPtr hWnd);

[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool HideCaret(IntPtr hWnd);


private void Form1_Load(object sender, System.EventArgs e)
{


}

private void button2_Click(object sender, System.EventArgs e)
{
HideCaret(this.Handle);
}

private void button1_Click(object sender, System.EventArgs e)
{
ShowCaret(this.Handle);
SetCaretPos(10,10);
}


}

}
 
V

Vadym Stetsyak

Just a hint: maybe it is necessary to create a caret at fist via
CreateCaret?.

if SetCaretPos returns false, try to obtain error code with GetLastError (
kernel32.dll )


--
Vadym Stetsyak aka Vadmyst

Hi everyone,
Can you have a quick look and tell me why the caret is
not shown , any help will be greatly appreicated
thank you.


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace test
{

public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;

private System.ComponentModel.Container components = null;

public Form1()
{

InitializeComponent();

}


protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code

private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(456, 240);
this.button1.Name = "button1";
this.button1.TabIndex = 2;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(456, 280);
this.button2.Name = "button2";
this.button2.TabIndex = 3;
this.button2.Text = "button2";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(616, 334);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion


[STAThread]
static void Main()
{
Application.Run(new Form1());
}

[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool SetCaretPos(int X, int Y);


[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool ShowCaret(IntPtr hWnd);

[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool HideCaret(IntPtr hWnd);


private void Form1_Load(object sender, System.EventArgs e)
{


}

private void button2_Click(object sender, System.EventArgs e)
{
HideCaret(this.Handle);
}

private void button1_Click(object sender, System.EventArgs e)
{
ShowCaret(this.Handle);
SetCaretPos(10,10);
}


}

}
 
E

eran.sandler

Just a quick tip about DLLImport.

If you want GetLastError to actually work for you, I suggest adding the
SetLastError=True to the DllImport.

For example:
[DllImport("User32.dll", CharSet=CharSet.Auto, SetLastError=True)]
public static extern bool HideCaret(IntPtr hWnd);

This will make sure the LastError IS set when existing this function.

Eran
==========================================================
http://dotnetdebug.blogspot.com - Advanced .NET Debugging Blog
The place for WinDbg, SOS, Live and post mortem debugging.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top