C#相談室

このエントリーをはてなブックマークに追加
>>778,779
これで逝けるんだけどさー、問題もあるんだよね。
・最初だけ改行されない
・WM_NOTIFYに全部反応しちゃってる
どのcode拾えばいいのかわかんなくて。
・structの中で、stringじゃなくcharにしちゃってる
MarshalAsしたんだけど、だめだった。
ま、あとはテキトーにやってくれや。

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class TestForm : Form {
TabControl TabControl1;
TabPage TabPage1, TabPage2;
public TestForm() {
TabPage1 = new TabPage();
TabPage1.Text = "Page1";
TabPage1.ToolTipText = "page1\r\nmultiline";
TabPage2 = new TabPage();
TabPage2.Text = "Page2";
TabPage2.ToolTipText = "page2\nmultiline";
TabControl1 = new TabControl();
TabControl1.Dock = DockStyle.Fill;
TabControl1.ShowToolTips = true;
TabControl1.Controls.Add(TabPage1);
TabControl1.Controls.Add(TabPage2);
this.Size = new Size(600, 400);
this.Text = "TabPage ToolTip Test";
this.Controls.Add(TabControl1);
}
[ STAThread ]
public static void Main() {
Application.Run(new TestForm());
}
[StructLayout(LayoutKind.Sequential)]
internal struct NMHDR {
internal IntPtr hwndFrom;
internal IntPtr idFrom;
internal ulong code;
}
[StructLayout(LayoutKind.Sequential)]
internal struct NMTTDISPINFO {
internal NMHDR hdr;
internal char lpszText;
internal char szText;
internal IntPtr hinst;
internal uint uFlags;
internal IntPtr lParam;
}
private const int WM_NOTIFY = 0x004E;
private const int WM_USER = 0x0400;
private const int TTM_SETMAXTIPWIDTH = (WM_USER + 24);
[DllImport("User32", CharSet=CharSet.Unicode)]
private static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message msg) {
if (msg.Msg == WM_NOTIFY) {
NMTTDISPINFO disp = (NMTTDISPINFO)msg.GetLParam(typeof(NMTTDISPINFO));
NMHDR hdr = disp.hdr;
SendMessage(hdr.hwndFrom, TTM_SETMAXTIPWIDTH, new IntPtr(0), new IntPtr(10));
}
base.WndProc(ref msg);
}
}
ちなみにToolTipクラスも使ってみたけど、TabPageに設定しても出てこないね。なんで?