Click here to Skip to main content
       

C#

 
GeneralRe: [TUTORIAL] Native Cocoa Apps with C# and MonoMac PinmvpDave Kreskowiak23-Feb-13 14:39 
GeneralRe: [TUTORIAL] Native Cocoa Apps with C# and MonoMac PinmemberMycroft Holmes24-Feb-13 18:17 
Questionprograme Pinmemberongwere23-Feb-13 9:35 
AnswerRe: programe PinmemberSoMad23-Feb-13 10:37 
GeneralRe: programe PinmemberManfred R. Bihy23-Feb-13 11:37 
GeneralRe: programe PinmemberSoMad23-Feb-13 11:46 
AnswerRe: programe PinprofessionalAmir Mohammad Nasrollahi29-Jul-13 21:45 
QuestionCustomize windows scroll bar in combobox PinmemberKaizen20223-Feb-13 7:45 
I am trying to customize default windows scrollbar in combobox like below.
 
public partial class ComboEx : ComboBox
{
    internal ScrollbarEx vScrollBar;
    NativeListWindow listControl;
    public ComboEx()
    {
        InitializeComponent();
        DropDownHeight = 100;
        vScrollBar = new ScrollbarEx();
    }
 
    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }
 
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        COMBOBOXINFO combInfo = new COMBOBOXINFO();
        combInfo.cbSize = Marshal.SizeOf(combInfo);
        Win32.GetComboBoxInfo( this.Handle, ref combInfo );
 
        listControl = new NativeListWindow(this, combInfo.hwndList);
    }
 
    protected override void WndProc(ref Message m)
    {
         if (m.Msg == (Win32.WM_REFLECT + Win32.WM_COMMAND))
        {
            if (Win32.HIWORD( (int)m.WParam ) == Win32.CBN_DROPDOWN)
            {
                COMBOBOXINFO combInfo = new COMBOBOXINFO();
                combInfo.cbSize = Marshal.SizeOf(combInfo);
                Win32.GetComboBoxInfo( this.Handle, ref combInfo );
 
                vScrollBar.Location = new Point( this.Width-23, 1 );
                vScrollBar.Size = new Size( 23, DropDownHeight );
                vScrollBar.Visible = true;
                Win32.SetParent(vScrollBar.Handle, combInfo.hwndList);
                Win32.ShowWindow(vScrollBar.Handle, ShowWindowCommands.Show);
                Win32.SetWindowPos(vScrollBar.Handle,HWND.TopMost, 155, 1, 23, 105, SetWindowPosFlags.SWP_SHOWWINDOW);
            }
        }
        base.WndProc(ref m);
    }
 
    // MyNativeWindow class to create a window given a class name.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    internal class NativeListWindow : NativeWindow
    {
        // Constant values were found in the "windows.h" header file.
        private const int WS_CHILD = 0x40000000,
                          WS_VISIBLE = 0x10000000,
                          WM_ACTIVATEAPP = 0x001C;
 
        private int windowHandle;
 
        private ComboEx parent;
 
        public NativeListWindow(ComboEx owner,IntPtr handle)
        {
            AssignHandle(handle);
            parent = owner;
 
        }
 
        // Listen to when the handle changes to keep the variable in sync
        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        protected override void OnHandleChange()
        {
            windowHandle = (int)this.Handle;
        }
 
        private void AdjustClientRect(ref RECT rect)
        {
            rect.right -= 23;
        }
 
        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        protected override void WndProc(ref Message message)
        {
            // Listen for messages that are sent to the button window. Some messages are sent 
            // to the parent window instead of the button's window. 

            switch (message.Msg)
            {
                case Win32.NCCALCSIZE:
                    {
                        if (message.WParam != IntPtr.Zero)
                        {
                            NCCALCSIZE_PARAMS rcsize = (NCCALCSIZE_PARAMS)Marshal.PtrToStructure(message.LParam, typeof(NCCALCSIZE_PARAMS));
                            AdjustClientRect(ref rcsize.rect0);
                            Marshal.StructureToPtr(rcsize, message.LParam, false);
                        }
                        else
                        {
                            RECT rcsize = (RECT)Marshal.PtrToStructure(message.LParam, typeof(RECT));
                            AdjustClientRect(ref rcsize);
                            Marshal.StructureToPtr(rcsize, message.LParam, false);
                        }
                        message.Result = new IntPtr(1);
                        return;
                        break;
                    }
 
                    case Win32.WM_NCMOUSEMOVE:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                        break;
                    }
                    case Win32.WM_NCLBUTTONDOWN:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                    }
                    case Win32.WM_NCACTIVATE:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                    }
                    case Win32.WM_NCMOUSELEAVE:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                    }
                    case Win32.WM_NCLBUTTONUP:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                    }
                    case Win32.WM_NCHITTEST:
                    {
                        base.WndProc(ref message);
                        Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                        break;
                    }
                    case Win32.WM_MOUSEMOVE:
                    {
                        base.WndProc(ref message);
                        if ((int)message.LParam > 0)
                        {
                            int x = Win32.LOWORD((int)message.LParam);
                            int y = Win32.HIWORD((int)message.LParam);
                            RECT rect = new RECT(); ;
                            Win32.GetWindowRect(new HandleRef(parent.vScrollBar, parent.vScrollBar.Handle),out rect);
                            Rectangle rc = new Rectangle(parent.vScrollBar.Location.X, parent.vScrollBar.Location.Y,
                                (rect.right - rect.left), (rect.bottom - rect.top));
                            if (rc.Contains(new Point(x, y)))
                            {
                                Win32.SetFocus(parent.vScrollBar.Handle);
                                Win32.SetWindowPos(parent.vScrollBar.Handle, HWND.TopMost, 155, 1, 23, 105, SetWindowPosFlags.SWP_SHOWWINDOW);
                                Win32.SendMessage(parent.vScrollBar.Handle, (uint)message.Msg, message.WParam, message.LParam);
                            }
                        }
                        break;
                    }
            }
            base.WndProc(ref message);
        }
    }
}
In the above code, I did the following 1. created a NativeWindow to catch the messages of combobox listcontrol by assigning combInfo.hwndList handle. 2. Placed my custom scrollbar(ScrollBarEx) in the non-client area of combobox listcontrol.
 
But my custom scrollbar(ScrollBarEx) doesn't receives any messages or focus. It looks like it is dead. Please look into this code and share some idea to make the scrollbar live.
AnswerRe: Customize windows scroll bar in combobox PinmemberSledgeHammer0123-Feb-13 9:20 
GeneralRe: Customize windows scroll bar in combobox PinmemberKaizen20224-Feb-13 6:01 
GeneralRe: Customize windows scroll bar in combobox PinmemberSledgeHammer0124-Feb-13 8:20 
Questionunable to start program, unrecognized error in windows web services framework Pinmemberbonosa23-Feb-13 5:06 
Questionwhy System.NullReferenceException occurred? PinmemberJassim Rahma23-Feb-13 1:54 
AnswerRe: why System.NullReferenceException occurred? PinmemberAlan N23-Feb-13 2:04 
GeneralRe: why System.NullReferenceException occurred? PinmemberJassim Rahma23-Feb-13 2:10 
GeneralRe: why System.NullReferenceException occurred? PinmemberAlan N23-Feb-13 2:33 
GeneralRe: why System.NullReferenceException occurred? PinmemberJassim Rahma23-Feb-13 2:44 
GeneralRe: why System.NullReferenceException occurred? PinmemberAlan N23-Feb-13 2:54 
AnswerRe: why System.NullReferenceException occurred? Pinmemberjschell24-Feb-13 7:05 
QuestionHow to read gmail mails using C# (only Unread Email ) [modified] PingroupAeroIT22-Feb-13 18:13 
AnswerRe: How to read gmail mails using C# (only Unread Email ) PinmvpDave Kreskowiak22-Feb-13 18:22 
AnswerRe: How to read gmail mails using C# (only Unread Email ) PinmvpOriginalGriff22-Feb-13 21:42 
AnswerRe: How to read gmail mails using C# (only Unread Email ) PinmemberMarco Bertschi23-Feb-13 8:02 
AnswerRe: How to read gmail mails using C# (only Unread Email ) [modified] PinprofessionalAmir Mohammad Nasrollahi29-Jul-13 21:51 
Questionsimplest hacking software in C# PinmemberMember 985741522-Feb-13 16:44 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


Advertise | Privacy | Mobile
Web04 | 2.8.140827.1 | Last Updated 30 Aug 2014
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid