블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2809)
Unity3D (865)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

IntPtr target_window = ...

            Point start_point = ...

 

            IntPtr lParamStartPoint = (IntPtr) BND.Windows.Helper.MakeParam(start_point.X, start_point.Y);

 

 

            // 1. 마우스 이동

            System.Windows.Forms.Message mouse_move_to_start = System.Windows.Forms.Message.Create(target_window, BND.Windows.Messages.WM_MOUSEMOVE, (IntPtr) BND.Windows.MouseMasks.MK_NULL, lParamStartPoint);

            BND.Windows.User32.PostMessage(mouse_move_to_start);

 

 

            // 2. 마우스 누름

            System.Windows.Forms.Message mouse_down = System.Windows.Forms.Message.Create(target_window, BND.Windows.Messages.WM_LBUTTONDOWN, (IntPtr) BND.Windows.MouseMasks.MK_NULL, lParamStartPoint);

            BND.Windows.User32.PostMessage(mouse_down);

 

 

-------------------------

 

        //

        // MakeParam

        //

 

        public static int MakeParam(int LoWord, int HiWord)

        {

            return (((HiWord & 0x000000FF) << 16) | (LoWord & 0x000000FF));

        }

 

-------------------------

 

 

        [DllImport("User32")] public extern static bool PostMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);

 

 

        public static bool PostMessage(System.Windows.Forms.Message m)

        {

            return PostMessage(m.HWnd, m.Msg, m.WParam, m.LParam);

        }

 

--------------------------

 

    public class Messages

    {

        public const int WM_NULL = 0x0000;

        public const int WM_CREATE = 0x0001;

        public const int WM_DESTROY = 0x0002;

        public const int WM_MOVE = 0x0003;

        public const int WM_SIZE = 0x0005;

        public const int WM_ACTIVATE = 0x0006;

        public const int WM_SETFOCUS = 0x0007;

        public const int WM_KILLFOCUS = 0x0008;

        public const int WM_ENABLE = 0x000A;

        public const int WM_SETREDRAW = 0x000B;

        public const int WM_SETTEXT = 0x000C;

        public const int WM_GETTEXT = 0x000D;

        public const int WM_GETTEXTLENGTH = 0x000E;

        public const int WM_PAINT = 0x000F;

        public const int WM_CLOSE = 0x0010;

        public const int WM_QUERYENDSESSION = 0x0011;

        public const int WM_QUERYOPEN = 0x0013;

        public const int WM_ENDSESSION = 0x0016;

        public const int WM_QUIT = 0x0012;

        public const int WM_ERASEBKGND = 0x0014;

        public const int WM_SYSCOLORCHANGE = 0x0015;

        public const int WM_SHOWWINDOW = 0x0018;

        public const int WM_WININICHANGE = 0x001A;

        public const int WM_SETTINGCHANGE = 0x001A;

        public const int WM_DEVMODECHANGE = 0x001B;

        public const int WM_ACTIVATEAPP = 0x001C;

        public const int WM_FONTCHANGE = 0x001D;

        public const int WM_TIMECHANGE = 0x001E;

        public const int WM_CANCELMODE = 0x001F;

        public const int WM_SETCURSOR = 0x0020;

        public const int WM_MOUSEACTIVATE = 0x0021;

        public const int WM_CHILDACTIVATE = 0x0022;

        public const int WM_QUEUESYNC = 0x0023;

        public const int WM_GETMINMAXINFO = 0x0024;

        public const int WM_PAINTICON = 0x0026;

        public const int WM_ICONERASEBKGND = 0x0027;

        public const int WM_NEXTDLGCTL = 0x0028;

        public const int WM_SPOOLERSTATUS = 0x002A;

        public const int WM_DRAWITEM = 0x002B;

        public const int WM_MEASUREITEM = 0x002C;

        public const int WM_DELETEITEM = 0x002D;

        public const int WM_VKEYTOITEM = 0x002E;

        public const int WM_CHARTOITEM = 0x002F;

        public const int WM_SETFONT = 0x0030;

        public const int WM_GETFONT = 0x0031;

        public const int WM_SETHOTKEY = 0x0032;

        public const int WM_GETHOTKEY = 0x0033;

        public const int WM_QUERYDRAGICON = 0x0037;

        public const int WM_COMPAREITEM = 0x0039;

        public const int WM_GETOBJECT = 0x003D;

        public const int WM_COMPACTING = 0x0041;

        public const int WM_COMMNOTIFY = 0x0044;

        public const int WM_WINDOWPOSCHANGING = 0x0046;

        public const int WM_WINDOWPOSCHANGED = 0x0047;

        public const int WM_POWER = 0x0048;

        public const int WM_COPYDATA = 0x004A;

        public const int WM_CANCELJOURNAL = 0x004B;

        public const int WM_NOTIFY = 0x004E;

        public const int WM_INPUTLANGCHANGEREQUEST = 0x0050;

        public const int WM_INPUTLANGCHANGE = 0x0051;

        public const int WM_TCARD = 0x0052;

        public const int WM_HELP = 0x0053;

        public const int WM_USERCHANGED = 0x0054;

        public const int WM_NOTIFYFORMAT = 0x0055;

        public const int WM_CONTEXTMENU = 0x007B;

        public const int WM_STYLECHANGING = 0x007C;

        public const int WM_STYLECHANGED = 0x007D;

        public const int WM_DISPLAYCHANGE = 0x007E;

        public const int WM_GETICON = 0x007F;

        public const int WM_SETICON = 0x0080;

        public const int WM_NCCREATE = 0x0081;

        public const int WM_NCDESTROY = 0x0082;

        public const int WM_NCCALCSIZE = 0x0083;

        public const int WM_NCHITTEST = 0x0084;

        public const int WM_NCPAINT = 0x0085;

        public const int WM_NCACTIVATE = 0x0086;

        public const int WM_GETDLGCODE = 0x0087;

        public const int WM_SYNCPAINT = 0x0088;

        public const int WM_NCMOUSEMOVE = 0x00A0;

        public const int WM_NCLBUTTONDOWN = 0x00A1;

        public const int WM_NCLBUTTONUP = 0x00A2;

        public const int WM_NCLBUTTONDBLCLK = 0x00A3;

        public const int WM_NCRBUTTONDOWN = 0x00A4;

        public const int WM_NCRBUTTONUP = 0x00A5;

        public const int WM_NCRBUTTONDBLCLK = 0x00A6;

        public const int WM_NCMBUTTONDOWN = 0x00A7;

        public const int WM_NCMBUTTONUP = 0x00A8;

        public const int WM_NCMBUTTONDBLCLK = 0x00A9;

        public const int WM_NCXBUTTONDOWN = 0x00AB;

        public const int WM_NCXBUTTONUP = 0x00AC;

        public const int WM_NCXBUTTONDBLCLK = 0x00AD;

        public const int WM_INPUT = 0x00FF;

        public const int WM_KEYFIRST = 0x0100;

        public const int WM_KEYDOWN = 0x0100;

        public const int WM_KEYUP = 0x0101;

        public const int WM_CHAR = 0x0102;

        public const int WM_DEADCHAR = 0x0103;

        public const int WM_SYSKEYDOWN = 0x0104;

        public const int WM_SYSKEYUP = 0x0105;

        public const int WM_SYSCHAR = 0x0106;

        public const int WM_SYSDEADCHAR = 0x0107;

        public const int WM_UNICHAR = 0x0109;

        public const int WM_KEYLAST_NT501 = 0x0109;

        public const int UNICODE_NOCHAR = 0xFFFF;

        public const int WM_KEYLAST_PRE501 = 0x0108;

        public const int WM_IME_STARTCOMPOSITION = 0x010D;

        public const int WM_IME_ENDCOMPOSITION = 0x010E;

        public const int WM_IME_COMPOSITION = 0x010F;

        public const int WM_IME_KEYLAST = 0x010F;

        public const int WM_INITDIALOG = 0x0110;

        public const int WM_COMMAND = 0x0111;

        public const int WM_SYSCOMMAND = 0x0112;

        public const int WM_TIMER = 0x0113;

        public const int WM_HSCROLL = 0x0114;

        public const int WM_VSCROLL = 0x0115;

        public const int WM_INITMENU = 0x0116;

        public const int WM_INITMENUPOPUP = 0x0117;

        public const int WM_MENUSELECT = 0x011F;

        public const int WM_MENUCHAR = 0x0120;

        public const int WM_ENTERIDLE = 0x0121;

        public const int WM_MENURBUTTONUP = 0x0122;

        public const int WM_MENUDRAG = 0x0123;

        public const int WM_MENUGETOBJECT = 0x0124;

        public const int WM_UNINITMENUPOPUP = 0x0125;

        public const int WM_MENUCOMMAND = 0x0126;

        public const int WM_CHANGEUISTATE = 0x0127;

        public const int WM_UPDATEUISTATE = 0x0128;

        public const int WM_QUERYUISTATE = 0x0129;

        public const int WM_CTLCOLORMSGBOX = 0x0132;

        public const int WM_CTLCOLOREDIT = 0x0133;

        public const int WM_CTLCOLORLISTBOX = 0x0134;

        public const int WM_CTLCOLORBTN = 0x0135;

        public const int WM_CTLCOLORDLG = 0x0136;

        public const int WM_CTLCOLORSCROLLBAR = 0x0137;

        public const int WM_CTLCOLORSTATIC = 0x0138;

        public const int WM_MOUSEFIRST = 0x0200;

        public const int WM_MOUSEMOVE = 0x0200;

        public const int WM_LBUTTONDOWN = 0x0201;

        public const int WM_LBUTTONUP = 0x0202;

        public const int WM_LBUTTONDBLCLK = 0x0203;

        public const int WM_RBUTTONDOWN = 0x0204;

        public const int WM_RBUTTONUP = 0x0205;

        public const int WM_RBUTTONDBLCLK = 0x0206;

        public const int WM_MBUTTONDOWN = 0x0207;

        public const int WM_MBUTTONUP = 0x0208;

        public const int WM_MBUTTONDBLCLK = 0x0209;

        public const int WM_MOUSEWHEEL = 0x020A;

        public const int WM_XBUTTONDOWN = 0x020B;

        public const int WM_XBUTTONUP = 0x020C;

        public const int WM_XBUTTONDBLCLK = 0x020D;

        public const int WM_MOUSELAST_5 = 0x020D;

        public const int WM_MOUSELAST_4 = 0x020A;

        public const int WM_MOUSELAST_PRE_4 = 0x0209;

        public const int WM_PARENTNOTIFY = 0x0210;

        public const int WM_ENTERMENULOOP = 0x0211;

        public const int WM_EXITMENULOOP = 0x0212;

        public const int WM_NEXTMENU = 0x0213;

        public const int WM_SIZING = 0x0214;

        public const int WM_CAPTURECHANGED = 0x0215;

        public const int WM_MOVING = 0x0216;

        public const int WM_POWERBROADCAST = 0x0218;

        public const int WM_DEVICECHANGE = 0x0219;

        public const int WM_MDICREATE = 0x0220;

        public const int WM_MDIDESTROY = 0x0221;

        public const int WM_MDIACTIVATE = 0x0222;

        public const int WM_MDIRESTORE = 0x0223;

        public const int WM_MDINEXT = 0x0224;

        public const int WM_MDIMAXIMIZE = 0x0225;

        public const int WM_MDITILE = 0x0226;

        public const int WM_MDICASCADE = 0x0227;

        public const int WM_MDIICONARRANGE = 0x0228;

        public const int WM_MDIGETACTIVE = 0x0229;

        public const int WM_MDISETMENU = 0x0230;

        public const int WM_ENTERSIZEMOVE = 0x0231;

        public const int WM_EXITSIZEMOVE = 0x0232;

        public const int WM_DROPFILES = 0x0233;

        public const int WM_MDIREFRESHMENU = 0x0234;

        public const int WM_IME_SETCONTEXT = 0x0281;

        public const int WM_IME_NOTIFY = 0x0282;

        public const int WM_IME_CONTROL = 0x0283;

        public const int WM_IME_COMPOSITIONFULL = 0x0284;

        public const int WM_IME_SELECT = 0x0285;

        public const int WM_IME_CHAR = 0x0286;

        public const int WM_IME_REQUEST = 0x0288;

        public const int WM_IME_KEYDOWN = 0x0290;

        public const int WM_IME_KEYUP = 0x0291;

        public const int WM_MOUSEHOVER = 0x02A1;

        public const int WM_MOUSELEAVE = 0x02A3;

        public const int WM_NCMOUSEHOVER = 0x02A0;

        public const int WM_NCMOUSELEAVE = 0x02A2;

        public const int WM_WTSSESSION_CHANGE = 0x02B1;

        public const int WM_TABLET_FIRST = 0x02c0;

        public const int WM_TABLET_LAST = 0x02df;

        public const int WM_CUT = 0x0300;

        public const int WM_COPY = 0x0301;

        public const int WM_PASTE = 0x0302;

        public const int WM_CLEAR = 0x0303;

        public const int WM_UNDO = 0x0304;

        public const int WM_RENDERFORMAT = 0x0305;

        public const int WM_RENDERALLFORMATS = 0x0306;

        public const int WM_DESTROYCLIPBOARD = 0x0307;

        public const int WM_DRAWCLIPBOARD = 0x0308;

        public const int WM_PAINTCLIPBOARD = 0x0309;

        public const int WM_VSCROLLCLIPBOARD = 0x030A;

        public const int WM_SIZECLIPBOARD = 0x030B;

        public const int WM_ASKCBFORMATNAME = 0x030C;

        public const int WM_CHANGECBCHAIN = 0x030D;

        public const int WM_HSCROLLCLIPBOARD = 0x030E;

        public const int WM_QUERYNEWPALETTE = 0x030F;

        public const int WM_PALETTEISCHANGING = 0x0310;

        public const int WM_PALETTECHANGED = 0x0311;

        public const int WM_HOTKEY = 0x0312;

        public const int WM_PRINT = 0x0317;

        public const int WM_PRINTCLIENT = 0x0318;

        public const int WM_APPCOMMAND = 0x0319;

        public const int WM_THEMECHANGED = 0x031A;

        public const int WM_HANDHELDFIRST = 0x0358;

        public const int WM_HANDHELDLAST = 0x035F;

        public const int WM_AFXFIRST = 0x0360;

        public const int WM_AFXLAST = 0x037F;

        public const int WM_PENWINFIRST = 0x0380;

        public const int WM_PENWINLAST = 0x038F;

        public const int WM_APP = 0x8000;

        public const int WM_USER = 0x0400;

        public const int EM_GETSEL = 0x00B0;

        public const int EM_SETSEL = 0x00B1;

        public const int EM_GETRECT = 0x00B2;

        public const int EM_SETRECT = 0x00B3;

        public const int EM_SETRECTNP = 0x00B4;

        public const int EM_SCROLL = 0x00B5;

        public const int EM_LINESCROLL = 0x00B6;

        public const int EM_SCROLLCARET = 0x00B7;

        public const int EM_GETMODIFY = 0x00B8;

        public const int EM_SETMODIFY = 0x00B9;

        public const int EM_GETLINECOUNT = 0x00BA;

        public const int EM_LINEINDEX = 0x00BB;

        public const int EM_SETHANDLE = 0x00BC;

        public const int EM_GETHANDLE = 0x00BD;

        public const int EM_GETTHUMB = 0x00BE;

        public const int EM_LINELENGTH = 0x00C1;

        public const int EM_REPLACESEL = 0x00C2;

        public const int EM_GETLINE = 0x00C4;

        public const int EM_LIMITTEXT = 0x00C5;

        public const int EM_CANUNDO = 0x00C6;

        public const int EM_UNDO = 0x00C7;

        public const int EM_FMTLINES = 0x00C8;

        public const int EM_LINEFROMCHAR = 0x00C9;

        public const int EM_SETTABSTOPS = 0x00CB;

        public const int EM_SETPASSWORDCHAR = 0x00CC;

        public const int EM_EMPTYUNDOBUFFER = 0x00CD;

        public const int EM_GETFIRSTVISIBLELINE = 0x00CE;

        public const int EM_SETREADONLY = 0x00CF;

        public const int EM_SETWORDBREAKPROC = 0x00D0;

        public const int EM_GETWORDBREAKPROC = 0x00D1;

        public const int EM_GETPASSWORDCHAR = 0x00D2;

        public const int EM_SETMARGINS = 0x00D3;

        public const int EM_GETMARGINS = 0x00D4;

        public const int EM_SETLIMITTEXT = EM_LIMITTEXT;

        public const int EM_GETLIMITTEXT = 0x00D5;

        public const int EM_POSFROMCHAR = 0x00D6;

        public const int EM_CHARFROMPOS = 0x00D7;

        public const int EM_SETIMESTATUS = 0x00D8;

        public const int EM_GETIMESTATUS = 0x00D9;

        public const int BM_GETCHECK= 0x00F0;

        public const int BM_SETCHECK= 0x00F1;

        public const int BM_GETSTATE= 0x00F2;

        public const int BM_SETSTATE= 0x00F3;

        public const int BM_SETSTYLE= 0x00F4;

        public const int BM_CLICK = 0x00F5;

        public const int BM_GETIMAGE= 0x00F6;

        public const int BM_SETIMAGE= 0x00F7;

        public const int STM_SETICON = 0x0170;

        public const int STM_GETICON = 0x0171;

        public const int STM_SETIMAGE = 0x0172;

        public const int STM_GETIMAGE = 0x0173;

        public const int STM_MSGMAX = 0x0174;

        public const int DM_GETDEFID = (WM_USER+0);

        public const int DM_SETDEFID = (WM_USER+1);

        public const int DM_REPOSITION = (WM_USER+2);

        public const int LB_ADDSTRING = 0x0180;

        public const int LB_INSERTSTRING = 0x0181;

        public const int LB_DELETESTRING = 0x0182;

        public const int LB_SELITEMRANGEEX= 0x0183;

        public const int LB_RESETCONTENT = 0x0184;

        public const int LB_SETSEL = 0x0185;

        public const int LB_SETCURSEL = 0x0186;

        public const int LB_GETSEL = 0x0187;

        public const int LB_GETCURSEL = 0x0188;

        public const int LB_GETTEXT = 0x0189;

        public const int LB_GETTEXTLEN = 0x018A;

        public const int LB_GETCOUNT = 0x018B;

        public const int LB_SELECTSTRING = 0x018C;

        public const int LB_DIR = 0x018D;

        public const int LB_GETTOPINDEX = 0x018E;

        public const int LB_FINDSTRING = 0x018F;

        public const int LB_GETSELCOUNT = 0x0190;

        public const int LB_GETSELITEMS = 0x0191;

        public const int LB_SETTABSTOPS = 0x0192;

        public const int LB_GETHORIZONTALEXTENT = 0x0193;

        public const int LB_SETHORIZONTALEXTENT = 0x0194;

        public const int LB_SETCOLUMNWIDTH = 0x0195;

        public const int LB_ADDFILE = 0x0196;

        public const int LB_SETTOPINDEX = 0x0197;

        public const int LB_GETITEMRECT = 0x0198;

        public const int LB_GETITEMDATA = 0x0199;

        public const int LB_SETITEMDATA = 0x019A;

        public const int LB_SELITEMRANGE = 0x019B;

        public const int LB_SETANCHORINDEX = 0x019C;

        public const int LB_GETANCHORINDEX = 0x019D;

        public const int LB_SETCARETINDEX = 0x019E;

        public const int LB_GETCARETINDEX = 0x019F;

        public const int LB_SETITEMHEIGHT = 0x01A0;

        public const int LB_GETITEMHEIGHT = 0x01A1;

        public const int LB_FINDSTRINGEXACT = 0x01A2;

        public const int LB_SETLOCALE = 0x01A5;

        public const int LB_GETLOCALE = 0x01A6;

        public const int LB_SETCOUNT = 0x01A7;

        public const int LB_INITSTORAGE = 0x01A8;

        public const int LB_ITEMFROMPOINT = 0x01A9;

        public const int LB_MULTIPLEADDSTRING = 0x01B1;

        public const int LB_GETLISTBOXINFO= 0x01B2;

        public const int LB_MSGMAX_501 = 0x01B3;

        public const int LB_MSGMAX_WCE4 = 0x01B1;

        public const int LB_MSGMAX_4 = 0x01B0;

        public const int LB_MSGMAX_PRE4 = 0x01A8;

        public const int CB_GETEDITSEL = 0x0140;

        public const int CB_LIMITTEXT = 0x0141;

        public const int CB_SETEDITSEL = 0x0142;

        public const int CB_ADDSTRING = 0x0143;

        public const int CB_DELETESTRING = 0x0144;

        public const int CB_DIR = 0x0145;

        public const int CB_GETCOUNT = 0x0146;

        public const int CB_GETCURSEL = 0x0147;

        public const int CB_GETLBTEXT = 0x0148;

        public const int CB_GETLBTEXTLEN = 0x0149;

        public const int CB_INSERTSTRING = 0x014A;

        public const int CB_RESETCONTENT = 0x014B;

        public const int CB_FINDSTRING = 0x014C;

        public const int CB_SELECTSTRING = 0x014D;

        public const int CB_SETCURSEL = 0x014E;

        public const int CB_SHOWDROPDOWN = 0x014F;

        public const int CB_GETITEMDATA = 0x0150;

        public const int CB_SETITEMDATA = 0x0151;

        public const int CB_GETDROPPEDCONTROLRECT = 0x0152;

        public const int CB_SETITEMHEIGHT = 0x0153;

        public const int CB_GETITEMHEIGHT = 0x0154;

        public const int CB_SETEXTENDEDUI = 0x0155;

        public const int CB_GETEXTENDEDUI = 0x0156;

        public const int CB_GETDROPPEDSTATE = 0x0157;

        public const int CB_FINDSTRINGEXACT = 0x0158;

        public const int CB_SETLOCALE = 0x0159;

        public const int CB_GETLOCALE = 0x015A;

        public const int CB_GETTOPINDEX = 0x015B;

        public const int CB_SETTOPINDEX = 0x015C;

        public const int CB_GETHORIZONTALEXTENT = 0x015d;

        public const int CB_SETHORIZONTALEXTENT = 0x015e;

        public const int CB_GETDROPPEDWIDTH = 0x015f;

        public const int CB_SETDROPPEDWIDTH = 0x0160;

        public const int CB_INITSTORAGE = 0x0161;

        public const int CB_MULTIPLEADDSTRING = 0x0163;

        public const int CB_GETCOMBOBOXINFO = 0x0164;

        public const int CB_MSGMAX_501 = 0x0165;

        public const int CB_MSGMAX_WCE400 = 0x0163;

        public const int CB_MSGMAX_400 = 0x0162;

        public const int CB_MSGMAX_PRE400 = 0x015B;

        public const int SBM_SETPOS = 0x00E0;

        public const int SBM_GETPOS = 0x00E1;

        public const int SBM_SETRANGE = 0x00E2;

        public const int SBM_SETRANGEREDRAW = 0x00E6;

        public const int SBM_GETRANGE = 0x00E3;

        public const int SBM_ENABLE_ARROWS = 0x00E4;

        public const int SBM_SETSCROLLINFO = 0x00E9;

        public const int SBM_GETSCROLLINFO = 0x00EA;

        public const int SBM_GETSCROLLBARINFO= 0x00EB;

        public const int LVM_FIRST = 0x1000;// ListView messages

        public const int TV_FIRST = 0x1100;// TreeView messages

        public const int HDM_FIRST = 0x1200;// Header messages

        public const int TCM_FIRST = 0x1300;// Tab control messages

        public const int PGM_FIRST = 0x1400;// Pager control messages

        public const int ECM_FIRST = 0x1500;// Edit control messages

        public const int BCM_FIRST = 0x1600;// Button control messages

        public const int CBM_FIRST = 0x1700;// Combobox control messages

        public const int CCM_FIRST = 0x2000;// Common control shared messages

        public const int CCM_LAST =(CCM_FIRST + 0x200);

        public const int CCM_SETBKCOLOR = (CCM_FIRST + 1);

        public const int CCM_SETCOLORSCHEME = (CCM_FIRST + 2);

        public const int CCM_GETCOLORSCHEME = (CCM_FIRST + 3);

        public const int CCM_GETDROPTARGET = (CCM_FIRST + 4);

        public const int CCM_SETUNICODEFORMAT = (CCM_FIRST + 5);

        public const int CCM_GETUNICODEFORMAT = (CCM_FIRST + 6);

        public const int CCM_SETVERSION = (CCM_FIRST + 0x7);

        public const int CCM_GETVERSION = (CCM_FIRST + 0x8);

        public const int CCM_SETNOTIFYWINDOW = (CCM_FIRST + 0x9);

        public const int CCM_SETWINDOWTHEME = (CCM_FIRST + 0xb);

        public const int CCM_DPISCALE = (CCM_FIRST + 0xc);

        public const int HDM_GETITEMCOUNT = (HDM_FIRST + 0);

        public const int HDM_INSERTITEMA = (HDM_FIRST + 1);

        public const int HDM_INSERTITEMW = (HDM_FIRST + 10);

        public const int HDM_DELETEITEM = (HDM_FIRST + 2);

        public const int HDM_GETITEMA = (HDM_FIRST + 3);

        public const int HDM_GETITEMW = (HDM_FIRST + 11);

        public const int HDM_SETITEMA = (HDM_FIRST + 4);

        public const int HDM_SETITEMW = (HDM_FIRST + 12);

        public const int HDM_LAYOUT = (HDM_FIRST + 5);

        public const int HDM_HITTEST = (HDM_FIRST + 6);

        public const int HDM_GETITEMRECT = (HDM_FIRST + 7);

        public const int HDM_SETIMAGELIST = (HDM_FIRST + 8);

        public const int HDM_GETIMAGELIST = (HDM_FIRST + 9);

        public const int HDM_ORDERTOINDEX = (HDM_FIRST + 15);

        public const int HDM_CREATEDRAGIMAGE = (HDM_FIRST + 16);

        public const int HDM_GETORDERARRAY = (HDM_FIRST + 17);

        public const int HDM_SETORDERARRAY = (HDM_FIRST + 18);

        public const int HDM_SETHOTDIVIDER = (HDM_FIRST + 19);

        public const int HDM_SETBITMAPMARGIN = (HDM_FIRST + 20);

        public const int HDM_GETBITMAPMARGIN = (HDM_FIRST + 21);

        public const int HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int HDM_SETFILTERCHANGETIMEOUT = (HDM_FIRST+22);

        public const int HDM_EDITFILTER = (HDM_FIRST+23);

        public const int HDM_CLEARFILTER = (HDM_FIRST+24);

        public const int TB_ENABLEBUTTON = (WM_USER + 1);

        public const int TB_CHECKBUTTON = (WM_USER + 2);

        public const int TB_PRESSBUTTON = (WM_USER + 3);

        public const int TB_HIDEBUTTON = (WM_USER + 4);

        public const int TB_INDETERMINATE = (WM_USER + 5);

        public const int TB_MARKBUTTON = (WM_USER + 6);

        public const int TB_ISBUTTONENABLED = (WM_USER + 9);

        public const int TB_ISBUTTONCHECKED = (WM_USER + 10);

        public const int TB_ISBUTTONPRESSED = (WM_USER + 11);

        public const int TB_ISBUTTONHIDDEN = (WM_USER + 12);

        public const int TB_ISBUTTONINDETERMINATE = (WM_USER + 13);

        public const int TB_ISBUTTONHIGHLIGHTED = (WM_USER + 14);

        public const int TB_SETSTATE = (WM_USER + 17);

        public const int TB_GETSTATE = (WM_USER + 18);

        public const int TB_ADDBITMAP = (WM_USER + 19);

        public const int TB_ADDBUTTONSA = (WM_USER + 20);

        public const int TB_INSERTBUTTONA = (WM_USER + 21);

        public const int TB_ADDBUTTONS = (WM_USER + 20);

        public const int TB_INSERTBUTTON = (WM_USER + 21);

        public const int TB_DELETEBUTTON = (WM_USER + 22);

        public const int TB_GETBUTTON = (WM_USER + 23);

        public const int TB_BUTTONCOUNT = (WM_USER + 24);

        public const int TB_COMMANDTOINDEX = (WM_USER + 25);

        public const int TB_SAVERESTOREA = (WM_USER + 26);

        public const int TB_SAVERESTOREW = (WM_USER + 76);

        public const int TB_CUSTOMIZE = (WM_USER + 27);

        public const int TB_ADDSTRINGA = (WM_USER + 28);

        public const int TB_ADDSTRINGW = (WM_USER + 77);

        public const int TB_GETITEMRECT = (WM_USER + 29);

        public const int TB_BUTTONSTRUCTSIZE = (WM_USER + 30);

        public const int TB_SETBUTTONSIZE = (WM_USER + 31);

        public const int TB_SETBITMAPSIZE = (WM_USER + 32);

        public const int TB_AUTOSIZE = (WM_USER + 33);

        public const int TB_GETTOOLTIPS = (WM_USER + 35);

        public const int TB_SETTOOLTIPS = (WM_USER + 36);

        public const int TB_SETPARENT = (WM_USER + 37);

        public const int TB_SETROWS = (WM_USER + 39);

        public const int TB_GETROWS = (WM_USER + 40);

        public const int TB_SETCMDID = (WM_USER + 42);

        public const int TB_CHANGEBITMAP = (WM_USER + 43);

        public const int TB_GETBITMAP = (WM_USER + 44);

        public const int TB_GETBUTTONTEXTA = (WM_USER + 45);

        public const int TB_GETBUTTONTEXTW = (WM_USER + 75);

        public const int TB_REPLACEBITMAP = (WM_USER + 46);

        public const int TB_SETINDENT = (WM_USER + 47);

        public const int TB_SETIMAGELIST = (WM_USER + 48);

        public const int TB_GETIMAGELIST = (WM_USER + 49);

        public const int TB_LOADIMAGES = (WM_USER + 50);

        public const int TB_GETRECT = (WM_USER + 51);

        public const int TB_SETHOTIMAGELIST = (WM_USER + 52);

        public const int TB_GETHOTIMAGELIST = (WM_USER + 53);

        public const int TB_SETDISABLEDIMAGELIST = (WM_USER + 54);

        public const int TB_GETDISABLEDIMAGELIST = (WM_USER + 55);

        public const int TB_SETSTYLE = (WM_USER + 56);

        public const int TB_GETSTYLE = (WM_USER + 57);

        public const int TB_GETBUTTONSIZE = (WM_USER + 58);

        public const int TB_SETBUTTONWIDTH = (WM_USER + 59);

        public const int TB_SETMAXTEXTROWS = (WM_USER + 60);

        public const int TB_GETTEXTROWS = (WM_USER + 61);

        public const int TB_GETOBJECT = (WM_USER + 62);

        public const int TB_GETHOTITEM = (WM_USER + 71);

        public const int TB_SETHOTITEM = (WM_USER + 72);

        public const int TB_SETANCHORHIGHLIGHT = (WM_USER + 73);

        public const int TB_GETANCHORHIGHLIGHT = (WM_USER + 74);

        public const int TB_MAPACCELERATORA = (WM_USER + 78);

        public const int TB_GETINSERTMARK = (WM_USER + 79);

        public const int TB_SETINSERTMARK = (WM_USER + 80);

        public const int TB_INSERTMARKHITTEST = (WM_USER + 81);

        public const int TB_MOVEBUTTON = (WM_USER + 82);

        public const int TB_GETMAXSIZE = (WM_USER + 83);

        public const int TB_SETEXTENDEDSTYLE = (WM_USER + 84);

        public const int TB_GETEXTENDEDSTYLE = (WM_USER + 85);

        public const int TB_GETPADDING = (WM_USER + 86);

        public const int TB_SETPADDING = (WM_USER + 87);

        public const int TB_SETINSERTMARKCOLOR = (WM_USER + 88);

        public const int TB_GETINSERTMARKCOLOR = (WM_USER + 89);

        public const int TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME;

        public const int TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME;

        public const int TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int TB_MAPACCELERATORW = (WM_USER + 90);

        public const int TB_GETBITMAPFLAGS = (WM_USER + 41);

        public const int TB_GETBUTTONINFOW = (WM_USER + 63);

        public const int TB_SETBUTTONINFOW = (WM_USER + 64);

        public const int TB_GETBUTTONINFOA = (WM_USER + 65);

        public const int TB_SETBUTTONINFOA = (WM_USER + 66);

        public const int TB_INSERTBUTTONW = (WM_USER + 67);

        public const int TB_ADDBUTTONSW = (WM_USER + 68);

        public const int TB_HITTEST = (WM_USER + 69);

        public const int TB_SETDRAWTEXTFLAGS = (WM_USER + 70);

        public const int TB_GETSTRINGW = (WM_USER + 91);

        public const int TB_GETSTRINGA = (WM_USER + 92);

        public const int TB_GETMETRICS = (WM_USER + 101);

        public const int TB_SETMETRICS = (WM_USER + 102);

        public const int TB_SETWINDOWTHEME = CCM_SETWINDOWTHEME;

        public const int RB_INSERTBANDA = (WM_USER + 1);

        public const int RB_DELETEBAND = (WM_USER + 2);

        public const int RB_GETBARINFO = (WM_USER + 3);

        public const int RB_SETBARINFO = (WM_USER + 4);

        public const int RB_GETBANDINFO = (WM_USER + 5);

        public const int RB_SETBANDINFOA = (WM_USER + 6);

        public const int RB_SETPARENT = (WM_USER + 7);

        public const int RB_HITTEST = (WM_USER + 8);

        public const int RB_GETRECT = (WM_USER + 9);

        public const int RB_INSERTBANDW = (WM_USER + 10);

        public const int RB_SETBANDINFOW = (WM_USER + 11);

        public const int RB_GETBANDCOUNT = (WM_USER + 12);

        public const int RB_GETROWCOUNT = (WM_USER + 13);

        public const int RB_GETROWHEIGHT = (WM_USER + 14);

        public const int RB_IDTOINDEX = (WM_USER + 16);

        public const int RB_GETTOOLTIPS = (WM_USER + 17);

        public const int RB_SETTOOLTIPS = (WM_USER + 18);

        public const int RB_SETBKCOLOR = (WM_USER + 19);

        public const int RB_GETBKCOLOR = (WM_USER + 20);

        public const int RB_SETTEXTCOLOR = (WM_USER + 21);

        public const int RB_GETTEXTCOLOR = (WM_USER + 22);

        public const int RB_SIZETORECT = (WM_USER + 23);

        public const int RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME;

        public const int RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME;

        public const int RB_BEGINDRAG = (WM_USER + 24);

        public const int RB_ENDDRAG = (WM_USER + 25);

        public const int RB_DRAGMOVE = (WM_USER + 26);

        public const int RB_GETBARHEIGHT = (WM_USER + 27);

        public const int RB_GETBANDINFOW = (WM_USER + 28);

        public const int RB_GETBANDINFOA = (WM_USER + 29);

        public const int RB_MINIMIZEBAND = (WM_USER + 30);

        public const int RB_MAXIMIZEBAND = (WM_USER + 31);

        public const int RB_GETDROPTARGET = (CCM_GETDROPTARGET);

        public const int RB_GETBANDBORDERS = (WM_USER + 34);

        public const int RB_SHOWBAND = (WM_USER + 35);

        public const int RB_SETPALETTE = (WM_USER + 37);

        public const int RB_GETPALETTE = (WM_USER + 38);

        public const int RB_MOVEBAND = (WM_USER + 39);

        public const int RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int RB_GETBANDMARGINS = (WM_USER + 40);

        public const int RB_SETWINDOWTHEME = CCM_SETWINDOWTHEME;

        public const int RB_PUSHCHEVRON = (WM_USER + 43);

        public const int TTM_ACTIVATE = (WM_USER + 1);

        public const int TTM_SETDELAYTIME = (WM_USER + 3);

        public const int TTM_ADDTOOLA = (WM_USER + 4);

        public const int TTM_ADDTOOLW = (WM_USER + 50);

        public const int TTM_DELTOOLA = (WM_USER + 5);

        public const int TTM_DELTOOLW = (WM_USER + 51);

        public const int TTM_NEWTOOLRECTA = (WM_USER + 6);

        public const int TTM_NEWTOOLRECTW = (WM_USER + 52);

        public const int TTM_RELAYEVENT = (WM_USER + 7);

        public const int TTM_GETTOOLINFOA = (WM_USER + 8);

        public const int TTM_GETTOOLINFOW = (WM_USER + 53);

        public const int TTM_SETTOOLINFOA = (WM_USER + 9);

        public const int TTM_SETTOOLINFOW = (WM_USER + 54);

        public const int TTM_HITTESTA = (WM_USER +10);

        public const int TTM_HITTESTW = (WM_USER +55);

        public const int TTM_GETTEXTA = (WM_USER +11);

        public const int TTM_GETTEXTW = (WM_USER +56);

        public const int TTM_UPDATETIPTEXTA = (WM_USER +12);

        public const int TTM_UPDATETIPTEXTW = (WM_USER +57);

        public const int TTM_GETTOOLCOUNT = (WM_USER +13);

        public const int TTM_ENUMTOOLSA = (WM_USER +14);

        public const int TTM_ENUMTOOLSW = (WM_USER +58);

        public const int TTM_GETCURRENTTOOLA = (WM_USER + 15);

        public const int TTM_GETCURRENTTOOLW = (WM_USER + 59);

        public const int TTM_WINDOWFROMPOINT = (WM_USER + 16);

        public const int TTM_TRACKACTIVATE = (WM_USER + 17);

        public const int TTM_TRACKPOSITION = (WM_USER + 18);

        public const int TTM_SETTIPBKCOLOR = (WM_USER + 19);

        public const int TTM_SETTIPTEXTCOLOR = (WM_USER + 20);

        public const int TTM_GETDELAYTIME = (WM_USER + 21);

        public const int TTM_GETTIPBKCOLOR = (WM_USER + 22);

        public const int TTM_GETTIPTEXTCOLOR = (WM_USER + 23);

        public const int TTM_SETMAXTIPWIDTH = (WM_USER + 24);

        public const int TTM_GETMAXTIPWIDTH = (WM_USER + 25);

        public const int TTM_SETMARGIN = (WM_USER + 26);

        public const int TTM_GETMARGIN = (WM_USER + 27);

        public const int TTM_POP = (WM_USER + 28);

        public const int TTM_UPDATE = (WM_USER + 29);

        public const int TTM_GETBUBBLESIZE = (WM_USER + 30);

        public const int TTM_ADJUSTRECT = (WM_USER + 31);

        public const int TTM_SETTITLEA = (WM_USER + 32);

        public const int TTM_SETTITLEW = (WM_USER + 33);

        public const int TTM_POPUP = (WM_USER + 34);

        public const int TTM_GETTITLE = (WM_USER + 35);

        public const int TTM_SETWINDOWTHEME = CCM_SETWINDOWTHEME;

        public const int SB_SETTEXTA = (WM_USER+1);

        public const int SB_SETTEXTW = (WM_USER+11);

        public const int SB_GETTEXTA = (WM_USER+2);

        public const int SB_GETTEXTW = (WM_USER+13);

        public const int SB_GETTEXTLENGTHA = (WM_USER+3);

        public const int SB_GETTEXTLENGTHW = (WM_USER+12);

        public const int SB_SETPARTS = (WM_USER+4);

        public const int SB_GETPARTS = (WM_USER+6);

        public const int SB_GETBORDERS = (WM_USER+7);

        public const int SB_SETMINHEIGHT = (WM_USER+8);

        public const int SB_SIMPLE = (WM_USER+9);

        public const int SB_GETRECT = (WM_USER+10);

        public const int SB_ISSIMPLE = (WM_USER+14);

        public const int SB_SETICON = (WM_USER+15);

        public const int SB_SETTIPTEXTA = (WM_USER+16);

        public const int SB_SETTIPTEXTW = (WM_USER+17);

        public const int SB_GETTIPTEXTA = (WM_USER+18);

        public const int SB_GETTIPTEXTW = (WM_USER+19);

        public const int SB_GETICON = (WM_USER+20);

        public const int SB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int SB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int SB_SETBKCOLOR = CCM_SETBKCOLOR;

        public const int SB_SIMPLEID = 0x00ff;

        public const int TBM_GETPOS = (WM_USER);

        public const int TBM_GETRANGEMIN = (WM_USER+1);

        public const int TBM_GETRANGEMAX = (WM_USER+2);

        public const int TBM_GETTIC = (WM_USER+3);

        public const int TBM_SETTIC = (WM_USER+4);

        public const int TBM_SETPOS = (WM_USER+5);

        public const int TBM_SETRANGE = (WM_USER+6);

        public const int TBM_SETRANGEMIN = (WM_USER+7);

        public const int TBM_SETRANGEMAX = (WM_USER+8);

        public const int TBM_CLEARTICS = (WM_USER+9);

        public const int TBM_SETSEL = (WM_USER+10);

        public const int TBM_SETSELSTART = (WM_USER+11);

        public const int TBM_SETSELEND = (WM_USER+12);

        public const int TBM_GETPTICS = (WM_USER+14);

        public const int TBM_GETTICPOS = (WM_USER+15);

        public const int TBM_GETNUMTICS = (WM_USER+16);

        public const int TBM_GETSELSTART = (WM_USER+17);

        public const int TBM_GETSELEND = (WM_USER+18);

        public const int TBM_CLEARSEL = (WM_USER+19);

        public const int TBM_SETTICFREQ = (WM_USER+20);

        public const int TBM_SETPAGESIZE = (WM_USER+21);

        public const int TBM_GETPAGESIZE = (WM_USER+22);

        public const int TBM_SETLINESIZE = (WM_USER+23);

        public const int TBM_GETLINESIZE = (WM_USER+24);

        public const int TBM_GETTHUMBRECT = (WM_USER+25);

        public const int TBM_GETCHANNELRECT = (WM_USER+26);

        public const int TBM_SETTHUMBLENGTH = (WM_USER+27);

        public const int TBM_GETTHUMBLENGTH = (WM_USER+28);

        public const int TBM_SETTOOLTIPS = (WM_USER+29);

        public const int TBM_GETTOOLTIPS = (WM_USER+30);

        public const int TBM_SETTIPSIDE = (WM_USER+31);

        public const int TBM_SETBUDDY = (WM_USER+32);

        public const int TBM_GETBUDDY = (WM_USER+33);

        public const int TBM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int TBM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int DL_BEGINDRAG = (WM_USER+133);

        public const int DL_DRAGGING = (WM_USER+134);

        public const int DL_DROPPED = (WM_USER+135);

        public const int DL_CANCELDRAG = (WM_USER+136);

        public const int UDM_SETRANGE = (WM_USER+101);

        public const int UDM_GETRANGE = (WM_USER+102);

        public const int UDM_SETPOS = (WM_USER+103);

        public const int UDM_GETPOS = (WM_USER+104);

        public const int UDM_SETBUDDY = (WM_USER+105);

        public const int UDM_GETBUDDY = (WM_USER+106);

        public const int UDM_SETACCEL = (WM_USER+107);

        public const int UDM_GETACCEL = (WM_USER+108);

        public const int UDM_SETBASE = (WM_USER+109);

        public const int UDM_GETBASE = (WM_USER+110);

        public const int UDM_SETRANGE32 = (WM_USER+111);

        public const int UDM_GETRANGE32 = (WM_USER+112);

        public const int UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int UDM_SETPOS32 = (WM_USER+113);

        public const int UDM_GETPOS32 = (WM_USER+114);

        public const int PBM_SETRANGE = (WM_USER+1);

        public const int PBM_SETPOS = (WM_USER+2);

        public const int PBM_DELTAPOS = (WM_USER+3);

        public const int PBM_SETSTEP = (WM_USER+4);

        public const int PBM_STEPIT = (WM_USER+5);

        public const int PBM_SETRANGE32 = (WM_USER+6);

        public const int PBM_GETRANGE = (WM_USER+7);

        public const int PBM_GETPOS = (WM_USER+8);

        public const int PBM_SETBARCOLOR = (WM_USER+9);

        public const int PBM_SETBKCOLOR = CCM_SETBKCOLOR;

        public const int HKM_SETHOTKEY = (WM_USER+1);

        public const int HKM_GETHOTKEY = (WM_USER+2);

        public const int HKM_SETRULES = (WM_USER+3);

        public const int LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int LVM_GETBKCOLOR = (LVM_FIRST + 0);

        public const int LVM_SETBKCOLOR = (LVM_FIRST + 1);

        public const int LVM_GETIMAGELIST = (LVM_FIRST + 2);

        public const int LVM_SETIMAGELIST = (LVM_FIRST + 3);

        public const int LVM_GETITEMCOUNT = (LVM_FIRST + 4);

        public const int LVM_GETITEMA = (LVM_FIRST + 5);

        public const int LVM_GETITEMW = (LVM_FIRST + 75);

        public const int LVM_SETITEMA = (LVM_FIRST + 6);

        public const int LVM_SETITEMW = (LVM_FIRST + 76);

        public const int LVM_INSERTITEMA = (LVM_FIRST + 7);

        public const int LVM_INSERTITEMW = (LVM_FIRST + 77);

        public const int LVM_DELETEITEM = (LVM_FIRST + 8);

        public const int LVM_DELETEALLITEMS = (LVM_FIRST + 9);

        public const int LVM_GETCALLBACKMASK = (LVM_FIRST + 10);

        public const int LVM_SETCALLBACKMASK = (LVM_FIRST + 11);

        public const int LVM_FINDITEMA = (LVM_FIRST + 13);

        public const int LVM_FINDITEMW = (LVM_FIRST + 83);

        public const int LVM_GETITEMRECT = (LVM_FIRST + 14);

        public const int LVM_SETITEMPOSITION = (LVM_FIRST + 15);

        public const int LVM_GETITEMPOSITION = (LVM_FIRST + 16);

        public const int LVM_GETSTRINGWIDTHA = (LVM_FIRST + 17);

        public const int LVM_GETSTRINGWIDTHW = (LVM_FIRST + 87);

        public const int LVM_HITTEST = (LVM_FIRST + 18);

        public const int LVM_ENSUREVISIBLE = (LVM_FIRST + 19);

        public const int LVM_SCROLL = (LVM_FIRST + 20);

        public const int LVM_REDRAWITEMS = (LVM_FIRST + 21);

        public const int LVM_ARRANGE = (LVM_FIRST + 22);

        public const int LVM_EDITLABELA = (LVM_FIRST + 23);

        public const int LVM_EDITLABELW = (LVM_FIRST + 118);

        public const int LVM_GETEDITCONTROL = (LVM_FIRST + 24);

        public const int LVM_GETCOLUMNA = (LVM_FIRST + 25);

        public const int LVM_GETCOLUMNW = (LVM_FIRST + 95);

        public const int LVM_SETCOLUMNA = (LVM_FIRST + 26);

        public const int LVM_SETCOLUMNW = (LVM_FIRST + 96);

        public const int LVM_INSERTCOLUMNA = (LVM_FIRST + 27);

        public const int LVM_INSERTCOLUMNW = (LVM_FIRST + 97);

        public const int LVM_DELETECOLUMN = (LVM_FIRST + 28);

        public const int LVM_GETCOLUMNWIDTH = (LVM_FIRST + 29);

        public const int LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30);

        public const int LVM_CREATEDRAGIMAGE = (LVM_FIRST + 33);

        public const int LVM_GETVIEWRECT = (LVM_FIRST + 34);

        public const int LVM_GETTEXTCOLOR = (LVM_FIRST + 35);

        public const int LVM_SETTEXTCOLOR = (LVM_FIRST + 36);

        public const int LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37);

        public const int LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38);

        public const int LVM_GETTOPINDEX = (LVM_FIRST + 39);

        public const int LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40);

        public const int LVM_GETORIGIN = (LVM_FIRST + 41);

        public const int LVM_UPDATE = (LVM_FIRST + 42);

        public const int LVM_SETITEMSTATE = (LVM_FIRST + 43);

        public const int LVM_GETITEMSTATE = (LVM_FIRST + 44);

        public const int LVM_GETITEMTEXTA = (LVM_FIRST + 45);

        public const int LVM_GETITEMTEXTW = (LVM_FIRST + 115);

        public const int LVM_SETITEMTEXTA = (LVM_FIRST + 46);

        public const int LVM_SETITEMTEXTW = (LVM_FIRST + 116);

        public const int LVM_SETITEMCOUNT = (LVM_FIRST + 47);

        public const int LVM_SORTITEMS = (LVM_FIRST + 48);

        public const int LVM_SETITEMPOSITION32 = (LVM_FIRST + 49);

        public const int LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50);

        public const int LVM_GETITEMSPACING = (LVM_FIRST + 51);

        public const int LVM_GETISEARCHSTRINGA = (LVM_FIRST + 52);

        public const int LVM_GETISEARCHSTRINGW = (LVM_FIRST + 117);

        public const int LVM_SETICONSPACING = (LVM_FIRST + 53);

        public const int LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54);

        public const int LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55);

        public const int LVM_GETSUBITEMRECT = (LVM_FIRST + 56);

        public const int LVM_SUBITEMHITTEST = (LVM_FIRST + 57);

        public const int LVM_SETCOLUMNORDERARRAY = (LVM_FIRST + 58);

        public const int LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59);

        public const int LVM_SETHOTITEM = (LVM_FIRST + 60);

        public const int LVM_GETHOTITEM = (LVM_FIRST + 61);

        public const int LVM_SETHOTCURSOR = (LVM_FIRST + 62);

        public const int LVM_GETHOTCURSOR = (LVM_FIRST + 63);

        public const int LVM_APPROXIMATEVIEWRECT = (LVM_FIRST + 64);

        public const int LVM_SETWORKAREAS = (LVM_FIRST + 65);

        public const int LVM_GETWORKAREAS = (LVM_FIRST + 70);

        public const int LVM_GETNUMBEROFWORKAREAS = (LVM_FIRST + 73);

        public const int LVM_GETSELECTIONMARK = (LVM_FIRST + 66);

        public const int LVM_SETSELECTIONMARK = (LVM_FIRST + 67);

        public const int LVM_SETHOVERTIME = (LVM_FIRST + 71);

        public const int LVM_GETHOVERTIME = (LVM_FIRST + 72);

        public const int LVM_SETTOOLTIPS = (LVM_FIRST + 74);

        public const int LVM_GETTOOLTIPS = (LVM_FIRST + 78);

        public const int LVM_SORTITEMSEX = (LVM_FIRST + 81);

        public const int LVM_SETBKIMAGEA = (LVM_FIRST + 68);

        public const int LVM_SETBKIMAGEW = (LVM_FIRST + 138);

        public const int LVM_GETBKIMAGEA = (LVM_FIRST + 69);

        public const int LVM_GETBKIMAGEW = (LVM_FIRST + 139);

        public const int LVM_SETSELECTEDCOLUMN = (LVM_FIRST + 140);

        public const int LVM_SETTILEWIDTH = (LVM_FIRST + 141);

        public const int LVM_SETVIEW = (LVM_FIRST + 142);

        public const int LVM_GETVIEW = (LVM_FIRST + 143);

        public const int LVM_INSERTGROUP = (LVM_FIRST + 145);

        public const int LVM_SETGROUPINFO = (LVM_FIRST + 147);

        public const int LVM_GETGROUPINFO = (LVM_FIRST + 149);

        public const int LVM_REMOVEGROUP = (LVM_FIRST + 150);

        public const int LVM_MOVEGROUP = (LVM_FIRST + 151);

        public const int LVM_MOVEITEMTOGROUP = (LVM_FIRST + 154);

        public const int LVM_SETGROUPMETRICS = (LVM_FIRST + 155);

        public const int LVM_GETGROUPMETRICS = (LVM_FIRST + 156);

        public const int LVM_ENABLEGROUPVIEW = (LVM_FIRST + 157);

        public const int LVM_SORTGROUPS = (LVM_FIRST + 158);

        public const int LVM_INSERTGROUPSORTED = (LVM_FIRST + 159);

        public const int LVM_REMOVEALLGROUPS = (LVM_FIRST + 160);

        public const int LVM_HASGROUP = (LVM_FIRST + 161);

        public const int LVM_SETTILEVIEWINFO = (LVM_FIRST + 162);

        public const int LVM_GETTILEVIEWINFO = (LVM_FIRST + 163);

        public const int LVM_SETTILEINFO = (LVM_FIRST + 164);

        public const int LVM_GETTILEINFO = (LVM_FIRST + 165);

        public const int LVM_SETINSERTMARK = (LVM_FIRST + 166);

        public const int LVM_GETINSERTMARK = (LVM_FIRST + 167);

        public const int LVM_INSERTMARKHITTEST = (LVM_FIRST + 168);

        public const int LVM_GETINSERTMARKRECT = (LVM_FIRST + 169);

        public const int LVM_SETINSERTMARKCOLOR = (LVM_FIRST + 170);

        public const int LVM_GETINSERTMARKCOLOR = (LVM_FIRST + 171);

        public const int LVM_SETINFOTIP = (LVM_FIRST + 173);

        public const int LVM_GETSELECTEDCOLUMN = (LVM_FIRST + 174);

        public const int LVM_ISGROUPVIEWENABLED = (LVM_FIRST + 175);

        public const int LVM_GETOUTLINECOLOR = (LVM_FIRST + 176);

        public const int LVM_SETOUTLINECOLOR = (LVM_FIRST + 177);

        public const int LVM_CANCELEDITLABEL = (LVM_FIRST + 179);

        public const int LVM_MAPINDEXTOID = (LVM_FIRST + 180);

        public const int LVM_MAPIDTOINDEX = (LVM_FIRST + 181);

        public const int TVM_INSERTITEMA = (TV_FIRST + 0);

        public const int TVM_INSERTITEMW = (TV_FIRST + 50);

        public const int TVM_DELETEITEM = (TV_FIRST + 1);

        public const int TVM_EXPAND = (TV_FIRST + 2);

        public const int TVM_GETITEMRECT = (TV_FIRST + 4);

        public const int TVM_GETCOUNT = (TV_FIRST + 5);

        public const int TVM_GETINDENT = (TV_FIRST + 6);

        public const int TVM_SETINDENT = (TV_FIRST + 7);

        public const int TVM_GETIMAGELIST = (TV_FIRST + 8);

        public const int TVM_SETIMAGELIST = (TV_FIRST + 9);

        public const int TVM_GETNEXTITEM = (TV_FIRST + 10);

        public const int TVM_SELECTITEM = (TV_FIRST + 11);

        public const int TVM_GETITEMA = (TV_FIRST + 12);

        public const int TVM_GETITEMW = (TV_FIRST + 62);

        public const int TVM_SETITEMA = (TV_FIRST + 13);

        public const int TVM_SETITEMW = (TV_FIRST + 63);

        public const int TVM_EDITLABELA = (TV_FIRST + 14);

        public const int TVM_EDITLABELW = (TV_FIRST + 65);

        public const int TVM_GETEDITCONTROL = (TV_FIRST + 15);

        public const int TVM_GETVISIBLECOUNT = (TV_FIRST + 16);

        public const int TVM_HITTEST = (TV_FIRST + 17);

        public const int TVM_CREATEDRAGIMAGE = (TV_FIRST + 18);

        public const int TVM_SORTCHILDREN = (TV_FIRST + 19);

        public const int TVM_ENSUREVISIBLE = (TV_FIRST + 20);

        public const int TVM_SORTCHILDRENCB = (TV_FIRST + 21);

        public const int TVM_ENDEDITLABELNOW = (TV_FIRST + 22);

        public const int TVM_GETISEARCHSTRINGA = (TV_FIRST + 23);

        public const int TVM_GETISEARCHSTRINGW = (TV_FIRST + 64);

        public const int TVM_SETTOOLTIPS = (TV_FIRST + 24);

        public const int TVM_GETTOOLTIPS = (TV_FIRST + 25);

        public const int TVM_SETINSERTMARK = (TV_FIRST + 26);

        public const int TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int TVM_SETITEMHEIGHT = (TV_FIRST + 27);

        public const int TVM_GETITEMHEIGHT = (TV_FIRST + 28);

        public const int TVM_SETBKCOLOR = (TV_FIRST + 29);

        public const int TVM_SETTEXTCOLOR = (TV_FIRST + 30);

        public const int TVM_GETBKCOLOR = (TV_FIRST + 31);

        public const int TVM_GETTEXTCOLOR = (TV_FIRST + 32);

        public const int TVM_SETSCROLLTIME = (TV_FIRST + 33);

        public const int TVM_GETSCROLLTIME = (TV_FIRST + 34);

        public const int TVM_SETINSERTMARKCOLOR = (TV_FIRST + 37);

        public const int TVM_GETINSERTMARKCOLOR = (TV_FIRST + 38);

        public const int TVM_GETITEMSTATE = (TV_FIRST + 39);

        public const int TVM_SETLINECOLOR = (TV_FIRST + 40);

        public const int TVM_GETLINECOLOR = (TV_FIRST + 41);

        public const int TVM_MAPACCIDTOHTREEITEM = (TV_FIRST + 42);

        public const int TVM_MAPHTREEITEMTOACCID = (TV_FIRST + 43);

        public const int CBEM_INSERTITEMA = (WM_USER + 1);

        public const int CBEM_SETIMAGELIST = (WM_USER + 2);

        public const int CBEM_GETIMAGELIST = (WM_USER + 3);

        public const int CBEM_GETITEMA = (WM_USER + 4);

        public const int CBEM_SETITEMA = (WM_USER + 5);

        public const int CBEM_DELETEITEM = CB_DELETESTRING;

        public const int CBEM_GETCOMBOCONTROL = (WM_USER + 6);

        public const int CBEM_GETEDITCONTROL = (WM_USER + 7);

        public const int CBEM_SETEXTENDEDSTYLE = (WM_USER + 14);

        public const int CBEM_GETEXTENDEDSTYLE = (WM_USER + 9);

        public const int CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int CBEM_SETEXSTYLE = (WM_USER + 8);

        public const int CBEM_GETEXSTYLE = (WM_USER + 9);

        public const int CBEM_HASEDITCHANGED = (WM_USER + 10);

        public const int CBEM_INSERTITEMW = (WM_USER + 11);

        public const int CBEM_SETITEMW = (WM_USER + 12);

        public const int CBEM_GETITEMW = (WM_USER + 13);

        public const int TCM_GETIMAGELIST = (TCM_FIRST + 2);

        public const int TCM_SETIMAGELIST = (TCM_FIRST + 3);

        public const int TCM_GETITEMCOUNT = (TCM_FIRST + 4);

        public const int TCM_GETITEMA = (TCM_FIRST + 5);

        public const int TCM_GETITEMW = (TCM_FIRST + 60);

        public const int TCM_SETITEMA = (TCM_FIRST + 6);

        public const int TCM_SETITEMW = (TCM_FIRST + 61);

        public const int TCM_INSERTITEMA = (TCM_FIRST + 7);

        public const int TCM_INSERTITEMW = (TCM_FIRST + 62);

        public const int TCM_DELETEITEM = (TCM_FIRST + 8);

        public const int TCM_DELETEALLITEMS = (TCM_FIRST + 9);

        public const int TCM_GETITEMRECT = (TCM_FIRST + 10);

        public const int TCM_GETCURSEL = (TCM_FIRST + 11);

        public const int TCM_SETCURSEL = (TCM_FIRST + 12);

        public const int TCM_HITTEST = (TCM_FIRST + 13);

        public const int TCM_SETITEMEXTRA = (TCM_FIRST + 14);

        public const int TCM_ADJUSTRECT = (TCM_FIRST + 40);

        public const int TCM_SETITEMSIZE = (TCM_FIRST + 41);

        public const int TCM_REMOVEIMAGE = (TCM_FIRST + 42);

        public const int TCM_SETPADDING = (TCM_FIRST + 43);

        public const int TCM_GETROWCOUNT = (TCM_FIRST + 44);

        public const int TCM_GETTOOLTIPS = (TCM_FIRST + 45);

        public const int TCM_SETTOOLTIPS = (TCM_FIRST + 46);

        public const int TCM_GETCURFOCUS = (TCM_FIRST + 47);

        public const int TCM_SETCURFOCUS = (TCM_FIRST + 48);

        public const int TCM_SETMINTABWIDTH = (TCM_FIRST + 49);

        public const int TCM_DESELECTALL = (TCM_FIRST + 50);

        public const int TCM_HIGHLIGHTITEM = (TCM_FIRST + 51);

        public const int TCM_SETEXTENDEDSTYLE = (TCM_FIRST + 52);

        public const int TCM_GETEXTENDEDSTYLE = (TCM_FIRST + 53);

        public const int TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int ACM_OPENA = (WM_USER+100);

        public const int ACM_OPENW = (WM_USER+103);

        public const int ACM_PLAY = (WM_USER+101);

        public const int ACM_STOP = (WM_USER+102);

        public const int MCM_FIRST = 0x1000;

        public const int MCM_GETCURSEL = (MCM_FIRST + 1);

        public const int MCM_SETCURSEL = (MCM_FIRST + 2);

        public const int MCM_GETMAXSELCOUNT = (MCM_FIRST + 3);

        public const int MCM_SETMAXSELCOUNT = (MCM_FIRST + 4);

        public const int MCM_GETSELRANGE = (MCM_FIRST + 5);

        public const int MCM_SETSELRANGE = (MCM_FIRST + 6);

        public const int MCM_GETMONTHRANGE = (MCM_FIRST + 7);

        public const int MCM_SETDAYSTATE = (MCM_FIRST + 8);

        public const int MCM_GETMINREQRECT = (MCM_FIRST + 9);

        public const int MCM_SETCOLOR = (MCM_FIRST + 10);

        public const int MCM_GETCOLOR = (MCM_FIRST + 11);

        public const int MCM_SETTODAY = (MCM_FIRST + 12);

        public const int MCM_GETTODAY = (MCM_FIRST + 13);

        public const int MCM_HITTEST = (MCM_FIRST + 14);

        public const int MCM_SETFIRSTDAYOFWEEK = (MCM_FIRST + 15);

        public const int MCM_GETFIRSTDAYOFWEEK = (MCM_FIRST + 16);

        public const int MCM_GETRANGE = (MCM_FIRST + 17);

        public const int MCM_SETRANGE = (MCM_FIRST + 18);

        public const int MCM_GETMONTHDELTA = (MCM_FIRST + 19);

        public const int MCM_SETMONTHDELTA = (MCM_FIRST + 20);

        public const int MCM_GETMAXTODAYWIDTH = (MCM_FIRST + 21);

        public const int MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;

        public const int MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;

        public const int DTM_FIRST = 0x1000;

        public const int DTM_GETSYSTEMTIME = (DTM_FIRST + 1);

        public const int DTM_SETSYSTEMTIME = (DTM_FIRST + 2);

        public const int DTM_GETRANGE = (DTM_FIRST + 3);

        public const int DTM_SETRANGE = (DTM_FIRST + 4);

        public const int DTM_SETFORMATA = (DTM_FIRST + 5);

        public const int DTM_SETFORMATW = (DTM_FIRST + 50);

        public const int DTM_SETMCCOLOR = (DTM_FIRST + 6);

        public const int DTM_GETMCCOLOR = (DTM_FIRST + 7);

        public const int DTM_GETMONTHCAL = (DTM_FIRST + 8);

        public const int DTM_SETMCFONT = (DTM_FIRST + 9);

        public const int DTM_GETMCFONT = (DTM_FIRST + 10);

        public const int PGM_SETCHILD = (PGM_FIRST + 1);

        public const int PGM_RECALCSIZE = (PGM_FIRST + 2);

        public const int PGM_FORWARDMOUSE = (PGM_FIRST + 3);

        public const int PGM_SETBKCOLOR = (PGM_FIRST + 4);

        public const int PGM_GETBKCOLOR = (PGM_FIRST + 5);

        public const int PGM_SETBORDER = (PGM_FIRST + 6);

        public const int PGM_GETBORDER = (PGM_FIRST + 7);

        public const int PGM_SETPOS = (PGM_FIRST + 8);

        public const int PGM_GETPOS = (PGM_FIRST + 9);

        public const int PGM_SETBUTTONSIZE = (PGM_FIRST + 10);

        public const int PGM_GETBUTTONSIZE = (PGM_FIRST + 11);

        public const int PGM_GETBUTTONSTATE = (PGM_FIRST + 12);

        public const int PGM_GETDROPTARGET = CCM_GETDROPTARGET;

        public const int BCM_GETIDEALSIZE = (BCM_FIRST + 0x0001);

        public const int BCM_SETIMAGELIST = (BCM_FIRST + 0x0002);

        public const int BCM_GETIMAGELIST = (BCM_FIRST + 0x0003);

        public const int BCM_SETTEXTMARGIN = (BCM_FIRST + 0x0004);

        public const int BCM_GETTEXTMARGIN = (BCM_FIRST + 0x0005);

        public const int EM_SETCUEBANNER = (ECM_FIRST + 1);

        public const int EM_GETCUEBANNER = (ECM_FIRST + 2);

        public const int EM_SHOWBALLOONTIP = (ECM_FIRST + 3);

        public const int EM_HIDEBALLOONTIP = (ECM_FIRST + 4);

        public const int CB_SETMINVISIBLE = (CBM_FIRST + 1);

        public const int CB_GETMINVISIBLE = (CBM_FIRST + 2);

        public const int LM_HITTEST = (WM_USER + 0x300);

        public const int LM_GETIDEALHEIGHT = (WM_USER + 0x301);

        public const int LM_SETITEM = (WM_USER + 0x302);

        public const int LM_GETITEM = (WM_USER + 0x303);

    }

 

------------------------------

 

    public class MouseMasks

    {

        public const int MK_NULL = 0x0000;

        public const int MK_LBUTTON = 0x0001;

        public const int MK_RBUTTON = 0x0002;

        public const int MK_SHIFT = 0x0004;

        public const int MK_CONTROL = 0x0008;

        public const int MK_MBUTTON = 0x0010;

        public const int MK_XBUTTON1 = 0x0020;

        public const int MK_XBUTTON2 = 0x0040;

    }

 

-----------------------------

 

이 정도면 가능할 것 같습니다.


출처 : http://cafe.naver.com/koreapyj.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=303

반응형

'Programming > C#' 카테고리의 다른 글

C# IME (Input Method Editor) asian language support?  (0) 2010.09.03
C#을 이용한 사용자 정의 Event 구성  (0) 2010.09.02
환경 변수  (0) 2010.09.01
String과 string의 차이..??  (0) 2010.08.27
DataGridView 활용 Tip  (0) 2010.08.19
Posted by blueasa
, |

IME

Programming/Win32API / 2010. 9. 2. 17:07

먼저 IME를 사용하려면 프로젝트에 Imm32.lib를 추가하고, imm.h를 인클루드 해야한다.



IME 메시지

WM_IME_STARTCOMPOSITION 
    IME가 조립 문자열을 만들기 직전에 보냄. WPARAM, LPARAM의 값은 없음. 이 메시지를 DefWindowProc으로
    보내지 않으면 조립윈도우가 나타나지 않는다.

WM_IME_ENDCOMPOSITION
    조립이 끝났다는 통지 메시지. 인수와 리턴값 없음. 커스텀 IME 윈도우를 작성하지 않는다면 무시해도 무방함.

WM_IME_COMPOSITION
    조립 상태가 변경될때마다 보내진다. 
    WPARAM - 조립중의 문자의 코드가 전달, 이 코드는 2byte의 DBCS문자로 조립중인 중간 문자코드이다.
    LPARAM - 조립상태가 어떻게 변경되었는지, 이 문자를 어떻게 처리해야 하는지를 나타내는 플래그의 집합.
                    한글의 경우 다음 두 플래그가 특히 중요함.
                        GCS_COMPSTR : 아직 문자를 조립중이라는 뜻, 즉 아직 한 음절이 완성되지는 않았음.
                        GCS_RESULTSTR : 한 음절을 완전히 조립했다는 뜻.
                    이 플래그들이 있는지 살펴보면 문자가 완성된 것인지, 조립중인지 알 수 있음.

WM_IME_CHAR
    문자 하나가 완성되었을때 보내짐.
    WPARAM - 완성된 문자의 코드가 전달. 1byte만 전달되는 WM_CHAR과는 달리 DBCS일 수 있음.
                     (단, 유니코드 윈도우에서는 WM_CHAR, WM_IME_CHAR 모두 2byte이다.)
    이 메시지를 무시하면 한글 한 문자에 대해 WM_CHAR 메시지를 두번 받게 된다.

WM_IME_SETCONTEXT
    응용프로그램이 활성/비활성화될 때 보내진다. WPARAM이 TRUE이면 활성, FALSE이면 비활성화 되었다는 뜻이다.

WM_IME_NOTIFY
    IME 윈도우가 변경되었다는 통지 메시지이다. WPARAM으로 어떤 변경인지 통보됨.한글 입력, 영문 입력모드를
    변경할 때도 이 메시지가 전달된다.



Input Context 생성, 해제

Input Context(입력 컨텍스트) : IME가 내부적으로 사용하는 구조체이며 조립 문자열, 변환모드, IME 윈도우의 위치 등 IME의 현재 상태에 대한 정보들이 저장됨.


Input Context의 핸들을 얻는 함수

HIMC ImmGetContext(void); 
BOOL ImmReleaseContext(HWND hWnd, HIMC hIMC); 

Input Context를 조작하는 함수

BOOL ImmGetConversionStatus(HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence); 
BOOL ImmSetConversionStatus(HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence); 

    입력모드를 한글로 변환하고 싶으면
ImmSetConversionStatus(hImc, IME_CMODE_NATIVE, IME_SMODE_NONE); 

    입력모드를 영어로 변환하고 싶으면
ImmSetConversionStatus(hImc, 0, IME_SMODE_NONE); 
를 호출하면 된다.

    하지만 시스템이 만드는 Default Input Context는 스레드 내의 모든 윈도우가 공유하기 때문에 한글이나 영문으로 변경시
    모든 입력모드가 통일되게 변경된다. 만약 각각의 컨트롤에서 다른 입력모드를 주고 싶다면 윈도우별로 InputContext를
    생성, 해제하여 연결시키면 된다.


Input Context를 생성, 해제하는 함수

// InputContext를 위한 메모리를 할당하고, 그 핸들을 리턴 HIMC ImmCreateContext(void); 
// 특정 윈도우와 연결 HIMC ImmAssociateContext(HWND hWnd, HIMC hIMC); 
// InputContext를 메모리에서 해제 BOOL ImmDestroyContext(HIMC hIMC); 

    InputContext를 생성, 해제할 경우에는 Pen, Brush를 생성, 해제할때와 같은 방법으로 한다.
 
 
 
 
 
 
 
 
 
---
 
 
IME 활성, 비활성 제어 ( 출처 : http://smilewjp.springnote.com/pages/3182684 )
 

IME 관련 작업을 하다보면 IME의 활성/비활성 상태를 강제로 조정해야할 필요가 생깁니다.

관련 자료를 찾기 위해 인터넷을 검색하다보니 비밀번호나 아이디로 영문만 입력받고자 할때 많이 사용하더군요.

 

저같은 경우에는 중국어 관련해서 사설 IME를 사용하는데 문제가 생겨서 사용했습니다.

사설IME에서 입력을 받으면 안되는 상황에서 입력을 받고있어서 문제가 발생했습니다.

그래서 IME를 비활성 시키는 구문을 찾아서 넣었습니다.

  1. HIMC ImmAssociateContext( HWND hWnd, HIMC hImc );

MSDN의 ImmAssociateContext()를 살펴보면 이 API는 윈도우 별로 입력 컨텍스트를 만들었을때 컨텍스트를

지정하는데 사용할 수 있지만 hImc의 값에 NULL을 줄 경우, 해당 윈도우 창의 IME 포커스를 죽이게 됩니다.

따라서 관련된 IME는 동작하지 않게 되고, 사설 IME역시 동작을 하지 않습니다.

 

하지만 중요하게 알고 있어야 하는것은 ImmAssociateContext()를 할 경우 리턴값으로 기존의 HIMC값이 반환되기 때문에

나중에 사용을 위해서는 저장해 두어야합니다.

  1. void SetActive( BOOL isActive )
    {
       if( isActive )
       {
          // 기존의 값으로 IME를 다시 설정합니다.
          ImmAsscociateContext( hWnd, _oldhImc );
       }
       else
       {
          _oldhImc = ImmAssociateContext( hWnd, NULL );
          // IME를 비활성 시킵니다.
          // _oldhImc는 값을 저장하고 있어야 합니다.
       }
    }

출처 : Tong - race0203님의 C++통

반응형

'Programming > Win32API' 카테고리의 다른 글

Keyboard 입력 받기  (0) 2010.09.03
IME 영문만 입력가능하게 하기  (0) 2010.09.03
getClienteRect 와 getWindowRect  (0) 2010.08.31
mfc, api 의 HINSTANCE 구하기 GetModuleHandle(NULL)  (0) 2010.06.03
Virtual Keys, Standard Set  (0) 2010.04.21
Posted by blueasa
, |

남 몰래 이상한 동영상?을 보고 있거나, 회사에서 상사 몰래 채팅 하다 걸린적이 있는가? 이제는 더이상 걱정 할 필요없다. 단축키 한 방에 자신이 실행하고 있는 프로그램, 윈도우 창을 단 번에 숨겨준다. 
그럼도 참 --; 눈치코치다. 윈도우 창 숨기기 프로그램.


다운받고, 설치 할 필요없이 바로 실행 할 수 있다. 

실행 파일을 실행 하면 알림 창이 뜬다. 기본 단축키는 f8 이다. 마법의 F8.


단축키 변경, 아니면 감추기 대상에 자신이 자주 사용하는 프로그램을 추가 하고 싶을 때, 바탕화면 오른쪽 하단에 눈치코치 아이콘을 더블 클릭한다. 


그러면 감추기 대상, 단축키 변경 하기 싶다. 목록외 다른 프로그램을 추가 하고 싶다면, 지정 프로그램 감추기를 사용하면 된다. 

처음에 F8를 눌러서 안 될 경우, 컨트롤을 체크 하거나, 변경 해 본다. 


그리고 환경설정, 윈도우 시작하면서 자동으로 실행 할지, 그리고 눈치코치 아이콘 마져도 감출 것인지 설정하는 곳이다. 이제는 음지에서 초조한 마음으로 살지말자, 깨끗하고, 밝고, 자신있게 ㅡㅡ^
반응형

'Etc' 카테고리의 다른 글

치킨 명소  (0) 2010.09.09
아이폰4 받고 나서 제일 먼저 할 것들  (0) 2010.09.08
How To Be A Programmer  (0) 2010.08.23
프로세스 선호도 관련 API 함수  (0) 2010.07.20
Metacognition  (0) 2010.07.13
Posted by blueasa
, |

환경 변수

Programming/C# / 2010. 9. 1. 14:04

using System;

public class 환경변수
{
    public static void Main()
    {
         /// 교재 389p
        Console.WriteLine( Environment.SystemDirectory ); //시스템폴더
        Console.WriteLine( Environment.Version ); // 닷넷기준버전:2.0.50727
        Console.WriteLine( Environment.OSVersion ); //운영체제 버전
        Console.WriteLine( Environment.MachineName ); //컴퓨터명
        Console.WriteLine( Environment.UserName ); //사용자명
        Console.WriteLine( Environment.CurrentDirectory ); //현재 폴더
        Console.WriteLine( Environment.GetFolderPath
            (Environment.SpecialFolder.MyDocuments)); //내문서 폴더
    }
}

 

[출처] 환경변수|작성자 앙기

반응형
Posted by blueasa
, |

getWindowRect 은 윈도우 전체 화면에 대한 좌표를 말하며

getClientRect 는 각 핸들에 대한 좌표를 말한다.

 

getWindowRect 사용시

 

cRect.left  화면 좌측에서 핸들 좌측까지의 거리

cRect.right 화면 좌측에서 핸들 우측까지의 거리

cRect.top  화면 위쪽에서 핸들 위쪽까지의 거리

cRect.bottom 화면 위쪽에서 핸들 아래쪽까지의 거리

 

즉. 기준은 화면의 좌측과 위쪽이며, 그 기준에서 핸들의 각 위치까지의 거리를 말한다.

따라서 핸들의 가로 길이는 right - left, 세로 길이는 bottom - top 하면 구할 수 있다.

 

getClientRect 사용시

 

cRect.left  핸들 좌측에서 핸들 좌측까지의 거리

cRect.right 핸들 좌측에서 핸들 우측까지의 거리

cRect.top  핸들 위쪽에서 핸들 위쪽까지의 거리

cRect.bottom 핸들 위쪽에서 핸들 아래쪽까지의 거리

 

기본 개념은 getWindowRect와 같다. 다만 기준 위치가 다를 뿐이다.

기준위치가 핸들의 좌측과 위쪽이므로

cRect.left 와 cRect.top은 항상 0이 된다.

cRect.right 는 핸들의 가로 길이 cRect.bottom은 핸들의 세로 길이가 된다.


출처 : http://maximaro.blog.me/50047243920

반응형

'Programming > Win32API' 카테고리의 다른 글

IME 영문만 입력가능하게 하기  (0) 2010.09.03
IME  (0) 2010.09.02
mfc, api 의 HINSTANCE 구하기 GetModuleHandle(NULL)  (0) 2010.06.03
Virtual Keys, Standard Set  (0) 2010.04.21
Drag & Drop 예제 소스  (0) 2010.04.20
Posted by blueasa
, |
출처 : http://www.gamecode.org/tt/entry/1851

1. 도입

게임을 만드는 데 있어서 높은 프레임 레이트는 모든 프로그래머들의 공통적인 관심사가 아닐까 싶다. 이러한 관심사에 대한 아이디어와 이미 많이 적용되고 있는 것들을 정리하고자 한다.
(사실 제 관심사는 이런 거보단 '어떻게 해야 빨리 개발할 수 있나'입니다만, 항상 실패만 해서... T_T;;)

2. 하드웨어 가속

하드웨어의 발전과 함께 최적화에 대한 접근도 시시각각 변하고 있는 데, 최근 가장 큰 화제는 3차원 가속기를 얼마나 활용하느냐 하는 문제이다.

비디오카드가 최적화된 아키텍처로 렌더링의 많은 부분을 처리해 주면서 얻은 이점 중에 두 가지에 주목할 필요가 있다.

첫 번째로 기존의 CPU에서 해주어야 했던 일거리를 더욱 빠르고 효율적으로 처리해준다는 점이다. 즉 프로젝션, 클리핑등의 일을 CPU보다 GPU에서 더욱 빠르게 수행한다는 얘기다. (GPU가 CPU보다 코어 스피드는 느릴 수도 있지만, 최적화된 메모리 억세스, 다수의 계산 유닛을 통한 병렬적인 계산등을 통해 더 많은, 즉 더 빠른 계산을 하도록 설계되기 때문이다.) 얼마나 많은 일을 CPU가 아닌 GPU가 하느냐가 최적화의 포인트라고 할 수 있다.

두 번째로 병렬성에 있다. 즉, 비디오카드의 GPU와 메인CPU와는 완전히 별개로 수행된다는 점이다. 즉, 비디오카드가 열심히 렌더링하는 시점에도 CPU는 다른 일을 할 수 있다는 점이다. 즉, 비디오카드가 렌더링 할 동안 CPU가 더욱 많은 일을 하는 것이 최적화의 포인트겠고, 비디오카드가 한순간도 쉬지 않고 렌더링 작업을 하는 것이 가장 이상적이라고 할 수 있다. (여담으로 XBOX 개발킷 중에 카르마란 프로파일링 도구를 본 적이 있는 데, 그 툴의 기능은 원하는 타이밍의 프레임에 비디오카드가 idle 이 되는 구간을 - 즉 CPU가 일을 못 주고 혼자 뭔가 연산하는 타이밍 구간- 측정해서 리포트해주는 것이다. 이러한 관점에서 프로그래밍 허점을 찾도록 도와주는 도구인데 하드웨어 성능을 살리는 데 상당히 도움이 될 꺼란 생각이 든다.)

어떻게 해야 더욱 빠르게 렌더링 되느냐 같은 문제는 다음 글에서 다루기로 하고, 더 이상 렌더링 속도를 개선할 수 없는 상황이라고 가정하면, 위의 두 가지가 그것을 극복할 수 있는 방법이 될 것이다.

첫 번째의 경우에는 사실상 최적화할 수 있는 부분이 정해져 있기 때문에 [1], 하드웨어의 T&L과정을 완전히 GPU에 넘긴 후라면, 연산을 GPU로 넘긴다는 관점에서는 더 이상 해줄 수 있는 것이 없다.

하지만, 두 번째의 경우에는 특별한 무언가만 해준다면 쉽게 큰 효과를 얻을 수도 있는 데, 차근 차근 생각해보도록 하자.

3. 일반적인 CPU 와 GPU 의 작업 타이밍

메인 루핑은 렌더링과 전혀 상관없는 _process() 와 렌더링만 하는 _display() 함수로 구분해보자. (만약 인공지능 루틴 등에 렌더링 루틴이 삽입되어 있다면 원하는 대로 렌더링 배치를 하기가 힘드므로, 여기서 얘기하는 것을 적용하기는 쉽지 않다.)

만약 이와 같은 구성이라면 일반적인 프로세스의 처리 그래프는 [그림3.1]과 같을 것이다.


(그림 3.1)

간단히 그림을 살펴보면 먼저 process 가 수행되는 동안에는 GPU가 놀고 있다. 그러다. DISPLAY 가 시작되면 본격적으로 GPU 가 활동하게 된다. DISPLAY 루틴 상 부하가 있다면 위처럼 비디오 카드가 놀고 있는 타이밍이 있을 수 있다. 그리고 DISPLAY 루틴이 끝나는 지점 -일반적으로 flip 을 하거나 present 를 하는 순간- 부터 CPU는 비디오카드의 내부 큐(리스트)에 있는 작업들이 끝날 때까지 대기를 한다. (파란색 선 사이가 한 프레임을 나타낸다.)

[그림3.1]의 모양은 나타내는 프로그램은 비효율적으로 프로그래밍을 한 것이다. 하나씩 체크해보면서 이 구성을 최적화해서 비디오카드가 전혀 쉬지 않고 작동할 수 있도록 구성해본다.

4. 렌더링 루틴과 타이밍의 관계

먼저, GPU의 타이밍에 대해서 확인하고 넘어가자.


(그림 4.1)

[그림4.1]과 같은 경우를 생각해본다. CPU에서 매트릭스 트랜스폼하는 시간을 1 이라고 표시했다. A라는 오브젝트를 DrawPrimitive 하게 되면 거의 딜레이 없이 CPU에게 프로세스가 넘어오며, 그와  동시에 CPU와는 별개로 GPU는 렌더링을 한다. 여기서 CPU는 다시 매트릭스 트랜스폼 등의 과정을 거친후에 B 오프젝트를 렌더링하게 되며 GPU는 B를 렌더링 하게 된다.
여기서 관심있게 볼 것은 A보다 B의 오브젝트가 폴리곤이나 렌더링 부하가 더 많다고 가정했지만 DrawPrimitive 호출후 CPU에 프로세스 권한이 넘어오는 타이밍은 A나 B나 비슷하다는 것이다. GPU에게 명령을 주는 것은 폴리곤 수에 따라 하는 일에 큰 차이가 없다는 얘기다.

여기서 눈에 띄는 부분은 GPU가 A의 렌더링을 끝내고 대기하는 타이밍이다.
만약 B를 먼저 렌더링 한다면 어떻게 될까 ?


(그림4.2)

[그림4.2]처럼 된다. 즉 A의 작업은 비디오카드의 큐에 추가되고 비디오카드는 B의 렌더링이 끝나는 시점에 A를 렌더링하게 된다.

단순히 렌더링 타이밍에 맞춰서 배치만 조절해도 GPU가 대기하는 시간을 제거할 수 있다는 얘기다. 물론 위의 예처럼 GPU 타임을 예측해서 배치하는 것은 불가능하지만, [그림 4.3]처럼 단지 GPU가 부담을 느끼는 일을 먼저 던져준다면 별다른 처리 없이도 어느 정도의 효과를 얻을 수 있다.


(그림 4.3)

특히 CPU의 부담이 생길 수밖에 없는 배경 렌더링의 경우에는 배경 렌더링하기 전에 적절히 GPU에게 (좀 부담스러운 녀석으로) 할 일을 준다면 효과를 볼 수 있을 것이다. 항상 위의 그래프처럼 향상될 수도 있다는 얘기는 아니지만, 그렇지 않더라도 완충 효과를 줄 수 있어 대기 상태가 나타날 확률을 훨씬 줄일 수 있다. (배경보다 먼저 렌더링해도 전체적인 필레이트에 변화가 적다면 절대 손해 안보는 장사가 될 것이다. - 저라면 작게 렌더링 되면서, 폴리곤이 많은 녀석을 제물로 삼겠습니다.)

다만, 고려해야 할 것은 비디오의 큐 메모리도 한계가 있다는 것이다.
렌더링 타임이 긴 것들을 연속으로 넘기면 뒤의 처리들이 계속 큐게 쌓여서, 큐의 한계까지 차버리게 되는 데, 이 경우 큐에 넣기 위해 대기하는 시간이 생길 수 있다. (큐를 빨리 비우는 방법은 렌더링 타임이 작은 오브젝트를 찍는 것이므로 대기 시간이 안 생기고 큐에 무리를 주지 않는 범위에서 매니징을 해야 한다.)

한가지 주의할 것은 여기서 얘기하는 것은 순수하게 하드웨어의 힘으로 렌더링을 하는 경우여야 효과를 발휘할 수 있다는 점이다. 아닐 경우에는 GPU가 렌더링하는 시간이나 CPU가 처리하는 시간이나 비슷해져서 어떻게 해도 큰 차이가 없게 된다.

5. 최종 렌더링 타이밍

렌더링시 부하가 될만한 부분을 분리하여 구현하고 배치가 적절히 되었다면 [그림 5.1]처럼 나타낼 수 있다.


(그림 5.1)

한가지 짚고 넘어가면 보통 DISPLAY의 마지막에 호출되는 present나 flip 관련함수는 GPU 가 끝나기 전에 프로세스 권한을 넘겨주지 않는다. 즉 해당 함수에서는 큐가 빌 때까지 딜레이가 생기는 것이다. 실제로 DrawPrimitive 는 대부분 내부 큐에 렌더링할 꺼리를 쌓는 역할을 할 뿐이고 최종적으로 렌더링이 끝나는 것은 present 를 수행한 뒤가 된다.
(흔히 비 경험자들은 "프로파일링을 했더니 present함수가 가장 느리다." 라고 오해하기도 하는 데, 이는 직접적으로 present 함수의 부하가 아니므로 present 함수가 느리다고 생각하는 것은 적절한 판단은 아니다.)

인공지능, 물리학 등의 처리가 늘어날수록 process의 비중이 커져서 위의 구성으로는 GPU가 대기하는 시간이 비례해서 늘어나게 된다. 물론 위와 같이 배치하지 않고 렌더링 루틴 사이에 인공지능루틴들을 잘 넣으면, GPU가 대기하는 타이밍을 줄일 수도 있겠지만, 일정하게 효율을 얻기는 힘들기 때문에 추천하기는 어렵다.

결론부터 말하면 present 호출 후에 렌더링이 끝날 때까지 대기하는 시간에 CPU가 놀지 않고 다음 프레임의 process 를 실행하는 방법으로 이 문제를 해결할 수 있다.

#include <stdio.h>
#include <windows.h>

void _process()
{
   static int cnt=0;
   printf("process(%d)n", cnt++);
   Sleep(500); // process 부하
}

void _flip()
{
   Sleep(500); // flip 후 대기
}

void _display()
{
   static int cnt=0;
   static int time = timeGetTime();

   int delta = timeGetTime() - time;
   time += delta;

   printf("tdisplay (%d) %dn", cnt++, delta);
   Sleep(500); // 렌더링 명령

   _flip();
}

void main()
{
   int i;
   for(i=0; i<10; i++) {
       _process();
       _display();
   }
}

이해를 돕기 위해 가상적으로 위와 같은 파일을 구성해 봤다. 일반적인 구성을 만들어 본 것으로 process 가 500 ms, display 가 1000ms 의 부하를 가진다고 가정했다. (display는 500ms는 렌더링 명령하는 데 소비하는 시간, 500ms는 대기하는 시간이라고 가정했다.) 이를 실행해보면 다음과 같은 결과가 나온다.

process(0)
       display (0) 0
process(1)
       display (1) 1501
process(2)
       display (2) 1501
process(3)
       display (3) 1500
process(4)
       display (4) 1501

즉, _process와 _display에서 각 500ms, 1000ms 를 잡아먹기 때문에 한 프레임은 1500ms가 소요된다. 일반적인 경우라면 이 타이밍을 줄일 수는 없지만 [그림5.1]과 같다고 가정해보면 방법이 생긴다. 즉, _display의 렌더링 시간 중에 대기하는 시간에 다음 프레임의 _process 작업을 하는 것이다. 이 처리를 아래처럼 동기화 객체[2][3]를 이용하여 아래처럼 구현했다.

#include <stdio.h>
#include <windows.h>

HANDLE    g_hFlip, g_hRenderScene;

void _process()
{
   static int cnt=0;
   printf("process(%d)n", cnt++);
   Sleep(500);
}

void _flip()
{
   Sleep(500);
}

int g_done = 1;

DWORD WINAPI _flipper(void * ptr)
{
   WaitForSingleObjectEx(g_hFlip, INFINITE, FALSE);
   while(g_done) {
       _flip();
       SetEvent(g_hRenderScene);
       WaitForSingleObjectEx(g_hFlip, INFINITE, FALSE);
   }
   return 0;
}

void _display()
{
   static int cnt=0;
   static int time = timeGetTime();

   WaitForSingleObjectEx(g_hRenderScene, INFINITE, FALSE);

   int delta = timeGetTime() - time;
   time += delta;

   printf("tdisplay (%d) %dn", cnt++, delta);

   Sleep(500);

   SetEvent(g_hFlip);
}

void main()
{
   DWORD threadid;
   int i;

   g_hFlip = CreateEvent(NULL, FALSE, FALSE, NULL);
   g_hRenderScene = CreateEvent(NULL, FALSE, TRUE, NULL);

   CreateThread(NULL, 0, _flipper, 0, 0, &threadid);

   for(i=0; i<5; i++) {
       _process();
       _display();
   }

   CloseHandle(g_hFlip);
   CloseHandle(g_hRenderScene);
}

플리핑 함수만 처리하는 쓰레드를 두어서 이벤트 객체 g_hFlip로 _flip 을 컨트롤한다. 즉 처음엔 대기하다가 시그널을 주면 flip 함수를 실행하고 flip을 마친후엔 다음 시그널이 들어올때까지 블럭되어 대기하게 된다. 즉 _flip 함수 호출은 시그널을 주는 것으로 대체된다.
렌더링이 다되기도 전에 다음 프레임 렌더링하는 것을 방지하기 위해 g_hRenderScene 이벤트 객체를 두어서 흐름을 조정했다.

결과는 아래와 같다.

process(0)
       display (0) 0
process(1)
       display (1) 1001
process(2)
       display (2) 1001
process(3)
       display (3) 1002
process(4)
       display (4) 1001

즉 같은 내용을 실행하지만 전체적인 실행 간격을 줄일 수 있다는 얘기다.

보통 GPU 렌더링으로 대기하는 시간보다 process 시간이 작다면 이상적으로 GPU는 쉬지 않고 렌더링을 하게 되고, 최적의 프레임으로 렌더링이 가능해진다.

6. 결론

단순히 프레임을 극대화하는 방법은 아니지만, 물리학처리의 과부하, 네트워크 처리, 스크립트 호출 등으로 인한 불규칙한 프레임 저하에 좀 더 유연하도록 처리할 수 있고, 세세한 루틴 최적화에 대한 부담도 줄일 수 있다. (렌더링에 CPU가 관여하는 시간을 최소화했다면 최적화의 의미가 없을 수도 있겠다. - 물론 PC 플렛폼에서는 모든 하드웨어를 고려해야하기 때문에 생각하기 힘들지만...)

아주 기본적인 관계만을 고려한 것이지만 GPU를 최대한 활용하는 상황이라며 효율을 크게 높일 수 있는 방법이다.
점차 게임에서 처리하는 그래픽처리 규모나, 처리할 인공지능이나 물리학의 비중이 커지는 상황에서는 반드시 고려해야할 처리라고 생각된다.

(동기화 객체를 잘 이용한다면 프레임의 저하 없이 비동기적으로 리소스 로딩하는 루틴에도 활용할 수 있을 거 같네요. - 대기시간의 다음 프레임의 process 처리하고 남는 시간까지 활용해서...)

7. REFERENCE

[1] DirectX 9 Performance
   http://mirror.ati.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf

[2] Win32 Multithreading and Synchronization
   http://blacksun.box.sk/tutorials.php/id/150

[3] Siberschatz. Operating System Concepts 6nd edition, chapter 7, WILREY, 2003


출처 : http://www.gamecode.org/tt/entry/1851
반응형
Posted by blueasa
, |

TLS - Thread Local Storage [ 펌 http://purewell.egloos.com/3398289]
쓰레드를 돌리다보면 해당 쓰레드에서만 유효한 변수를 만들고 싶을 때가 있다. 그럴 때 어떻게 해야할까? 쓰레드 개수만큼 벡터를 잡고, 해당 쓰레드마다 벡터 인덱스를 넘겨주는 것도 나름 방법이지만, 이러한 경우를 위해 TLS라는 것이 존재한다. 축약처럼 쓰레드 안에서만 따로 스토리지를 할당한 것인데, 일반 프로세스의 스텍과 비슷하나 그 크기는 프로세스 것보다 당연히 작고 제약이 심한 편이다. 뭐 암튼 그런게 있다고 치자.

* GCC 메뉴얼 보면 TLS가 아니라 TSD(Thread Storage Duration)이라고 표현하였는데 대충 같은 말이다.

이것을 위해 POSIX는 pthread_key_create, pthread_get/setspecific 등 함수를 마련해놨지만 눈만 팽글팽글 돌고, 소스만 지저분해져 보일 것 같다. 귀찮으면 C99, C++98 표준 __thread 키워드를 사용하자. MSDN에 보니 __thread가 없어 보인다. 이가 없으면 잇몸으로라도...
#define __thread __declspec( thread )
대충 이 정도면 될 듯하다. 자자 각설하고, __thread란 키워드는 TLS에 변수를 선언해주는 일을 한다. 위에 나열한 pthread_* 함수를 호출하는 것으로 컴파일러가 대신 해석해주는 것일 수도 있으나 이건 가정이므로 넘어가고. 사용에 주의해야할 점은 아래와 같다. (대충대충 표준하고 MSDN 보면서 정리한 것임)
  1. 글로벌 변수나 static 변수에만 사용 가능하다.
    - function 안에 local 변수가 static이 아니라면 뭐더게 TLS에 저장할까? 당연히 그럴 필요가 없기 때문에 저런 제약이 있는 것이다. 이는 class에서 멤버 변수에도 적용한 법칙이다. static으로 선언한 멤버 변수에만 저 키워드를 사용할 수 있다.
  2. SO(DLL)과 로컬 영역을 넘나들면 뻑난다.
    - ... 그러니까 쓰지마라. 왜?
  3. 타입에 대한 한정자로 사용이 불가능하다.
    - const처럼 쓰지 말라는 것이고, 무조건 타입 앞에 붙이란 말이다. (VC에만 해당)
  4. 객체 이름과 이름 없는 객체에만 쓸 수 있다.
  5. 앞에 붙을 수 있는 건 static과 extern 뿐이다.
  6. 클래스 자체를 TLS에 넣을 때는 생성자와 소멸자가 없어야 한다.
역시나 예가 없으면 아무 것도 할 수 없는 나를 위하여~*
#include <iostream>
using namespace std;

__thread int gTest1;      // 성공

__thread void func(void); // 실패

void
func(__thread int lTest2) // 실패
{
}

class A
{
    static __thread int mTest3;   // 성공
    __thread int mTest4;          // 실패
};

int
func(void)
{
    static __thread int lTest5; // 성공
    __thread int lTest6;   // 실패
}

__thread union
{
    int i;
    char p[sizeof(int)];
} gTest7;   // 성공

__thread struct
{
    int i;
    char p[sizeof(int)];
} gTest8;   // 성공

class MyClass
{
public:
    int i;
    MyClass() i(0) {}
};

__thread MyClass cTest9; // 실패

int __thread * gTest9; // gcc 성공

int
main(int,char**)
{
    return 0;
}
나머진 시간 나는대로 정리하도록 해야겠다.


출처 : http://blog.naver.com/kkan22?Redirect=Log&logNo=80057856857
반응형

'Programming > C/C++' 카테고리의 다른 글

GameLoop (번역)  (0) 2010.09.16
IME 관련  (0) 2010.09.10
TCHAR을쓰면 바뀌는 함수들  (0) 2010.07.27
TCHAR printf  (0) 2010.07.12
A * pA = new B 과 B * pB = new B의 차이점.  (0) 2010.06.21
Posted by blueasa
, |
반응형
Posted by blueasa
, |

/FIXED[:NO]

설명

/FIXED 옵션을 사용하면 운영 체제에서는 기본 설정 기준 주소에서만 프로그램을 로드하게 됩니다. 기본 설정 기준 주소를 사용할 수 없으면 파일이 로드되지 않습니다. 자세한 내용은 /BASE(기준 주소)를 참조하십시오.

기본적으로 DLL을 빌드할 때는 /FIXED:NO가 기본값이 되고 다른 모든 프로젝트 형식에 대해서는 /FIXED가 기본값이 됩니다.

/FIXED를 지정하면 LINK에서는 프로그램에 재배치 섹션을 생성하지 않습니다. 런타임에 운영 체제가 해당 주소에서 프로그램을 로드할 수 없으면 오류 메시지가 표시되며 프로그램은 로드되지 않습니다.

프로그램에 재배치 섹션을 생성하려면 /FIXED:NO를 지정합니다.

Windows NT용 장치 드라이버를 빌드할 때는 /FIXED를 사용하지 마십시오.

Visual Studio 개발 환경에서 이 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual C++ 프로젝트 속성 설정을 참조하십시오.

  2. 링커 폴더를 클릭합니다.

  3. 명령줄 속성 페이지를 클릭합니다.

  4. 추가 옵션 상자에 옵션을 입력합니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

반응형
Posted by blueasa
, |

/FORCE:[MULTIPLE|UNRESOLVED]

설명

/FORCE 옵션을 사용하면 링커에서는 기호가 참조되어 있지만 정의되어 있지 않은 경우나 여러 번 정의되어 있는 경우에도 올바른 .exe 파일 또는 DLL을 만듭니다.

/FORCE 옵션에는 다음과 같이 선택적 인수를 사용할 수 있습니다.

  • /FORCE:MULTIPLE을 사용하면 LINK에서 기호에 대한 정의를 하나 이상 찾더라도 출력 파일을 만들 수 있습니다.

  • /FORCE:UNRESOLVED를 사용하면 LINK에서 정의되지 않은 기호를 찾더라도 출력 파일을 만들 수 있습니다. 진입점 기호가 확인되지 않으면 /FORCE:UNRESOLVED는 무시됩니다.

/FORCE에 인수를 사용하지 않으면 MULTIPLE과 UNRESOLVED를 모두 의미합니다.

이 옵션을 사용하여 만든 파일이 예상대로 실행되지 않을 수도 있습니다. 링커에서는 /FORCE 옵션이 지정된 경우 증분 링크를 수행하지 않기 때문입니다.

/clr를 사용하여 모듈을 컴파일하는 경우 /FORCE를 지정해도 이미지가 생성되지 않습니다.

Visual Studio 개발 환경에서 이 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual C++ 프로젝트 속성 설정을 참조하십시오.

  2. 링커 폴더를 클릭합니다.

  3. 명령줄 속성 페이지를 클릭합니다.

  4. 추가 옵션 상자에 옵션을 입력합니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

반응형
Posted by blueasa
, |