SidebarLibrary.WinControls.OutlookBar.ProcessHeaderHit C# (CSharp) Method

ProcessHeaderHit() private method

private ProcessHeaderHit ( int index ) : void
index int
return void
		void ProcessHeaderHit(int index)
		{
			Capture = true;
			Rectangle rc = GetHeaderRect(index);
			// Draw header pressed
			using (Graphics g = Graphics.FromHwnd(Handle))
			{
				DrawHeader(g, index, rc, Border3DStyle.Sunken);

#if !__MonoCS__
				bool headerPressed = true;
				bool doLoop = true;
				while (doLoop)
				{
					// Check messages until we find a condition to break out of the loop
					Win32.MSG msg = new Win32.MSG();
					WindowsAPI.GetMessage(ref msg, 0, 0, 0);
					Point point = new Point(0,0);
					if ( msg.message == (int)Msg.WM_MOUSEMOVE || msg.message == (int)Msg.WM_LBUTTONUP )
					{
						point = WindowsAPI.GetPointFromLPARAM((int)msg.lParam);
					}

					switch(msg.message)
					{
						case (int)Msg.WM_MOUSEMOVE:
						{
							int currentIndex;
							HitTestType hit = HitTest(point, out currentIndex, false);
							if (hit == HitTestType.Header && currentIndex == index)
							{
								if (!headerPressed)
								{
									DrawHeader(g, index, rc, Border3DStyle.Sunken);
									headerPressed = true;
								}
							}
							else
							{
								if (headerPressed)
								{
									DrawHeader(g, index, rc, Border3DStyle.RaisedInner);
									headerPressed = false;
								}
							}
							break;
						}
						case (int)Msg.WM_LBUTTONUP:
						{
							if (headerPressed)
							{
								DrawHeader(g, index, rc, Border3DStyle.RaisedInner);
								headerPressed = false;
							}
							int newIndex;
							HitTestType ht = HitTest(point, out newIndex, false);
							if ( ht == HitTestType.Header && newIndex != selectedHeader )
								SetCurrentBand(newIndex);
							doLoop = false;
							break;
						}
						case (int)Msg.WM_KEYDOWN:
						{
							if ( (int)msg.wParam == (int)VirtualKeys.VK_ESCAPE)
								doLoop = false;
							break;
						}
						default:
							WindowsAPI.DispatchMessage(ref msg);
							break;
					}
				}
#else
				// TODO-Linux: Windows dependant code.
#endif

				// Reset flags
				Capture = false;
			}
		}