첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170

▶ NoScrollBarNativeWindow.cs

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

/// <summary>
/// 스크롤 바 없는 네이티브 윈도우
/// </summary>
public class NoScrollBarNativeWindow : NativeWindow
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Import
    ////////////////////////////////////////////////////////////////////////////////////////// Static
    //////////////////////////////////////////////////////////////////////////////// Private

    #region 스크롤 바 보여주기 - ShowScrollBar(windowHandle, scrollBarType, show)

    /// <summary>
    /// 스크롤 바 보여주기
    /// </summary>
    /// <param name="windowHandle">윈도우 핸들</param>
    /// <param name="scrollBarType">스크롤 바 타입</param>
    /// <param name="show">보여주기</param>
    /// <returns>처리 결과</returns>
    [DllImport("user32.dll")]
    private static extern int ShowScrollBar(IntPtr windowHandle, int scrollBarType, int show);

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private
    
    #region Field

    /// <summary>
    /// WM_NCCALCSIZE
    /// </summary>
    private const int WM_NCCALCSIZE = 0x0083;

    /// <summary>
    /// SB_BOTH
    /// </summary>
    private const int SB_BOTH = 3;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - NoScrollBarNativeWindow()

    /// <summary>
    /// 생성자
    /// </summary>
    public NoScrollBarNativeWindow()
    {
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Protected

    #region 윈도우 프로시저 처리하기 - WndProc(message)

    /// <summary>
    /// 윈도우 프로시저 처리하기
    /// </summary>
    /// <param name="message">Message</param>
    protected override void WndProc(ref Message message)
    {
        switch(message.Msg)
        {
            case WM_NCCALCSIZE :

                ShowScrollBar(message.HWnd, SB_BOTH, 0);

                break;
        }

        base.WndProc(ref message);
    }

    #endregion
}

 

728x90

 

▶ MainForm.cs

using System;
using System.Windows.Forms;

/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - MainForm()

    /// <summary>
    /// 생성자
    /// </summary>
    public MainForm()
    {
        InitializeComponent();

    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region 폼 로드시 처리하기 - Form_Load(sender, e)

    /// <summary>
    /// 폼 로드시 처리하기
    /// </summary>
    /// <param name="sender">이벤트 발생자</param>
    /// <param name="e">이벤트 인자</param>
    private void Form_Load(object sender, EventArgs e)
    {
        NoScrollBarNativeWindow noScrollBarNativeWindow = new NoScrollBarNativeWindow();

        for(int i = 0; i < Controls.Count; i++)
        {
            MdiClient mdiClient = Controls[i] as MdiClient;

            if(mdiClient != null)
            {
                noScrollBarNativeWindow.ReleaseHandle();

                noScrollBarNativeWindow.AssignHandle(mdiClient.Handle);
            }
        }
    }

    #endregion
}

 

728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요