精华内容
下载资源
问答
  • 2017-01-18 22:43:58
    BOOL bRet = m_TreeEdit.Create( ES_LEFT | ES_NOHIDESEL | WS_BORDER | ES_MULTILINE, CRect(0,0,0,0), this, RENAMETEXTID );
    bRet == 1;创建成功

    void CMyTreeEdit::OnNcPaint()
    {
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CEdit::OnNcPaint()
    DWORD dwStyle=GetStyle();
    if(dwStyle&WS_BORDER)
    {
    //执行不到
    CDC *pdc = GetWindowDC();   
    ReleaseDC(pdc);   
    }
    }
    更多相关内容
  • 这2天研究了一下WS_BORDER和WX_EX_CLIENTEDGE的不同,以及在动态创建,和窗口绑定时候效果的不同。 下面开始: 1.先看MSDN有关WS_BORDER窗口风格,和WS_EX_CLIENTDEGE扩展窗口风格的定义。 WS

    每次研究一点东西,都没有记录,下次需要的时候又浪费时间重新去研究。本人就是个没有总结习惯的人,这样等于没用积累,实在不行。

    这2天研究了一下WS_BORDER和WX_EX_CLIENTEDGE的不同,以及在动态创建,和窗口绑定时候效果的不同。

    下面开始:


    1.先看MSDN有关WS_BORDER窗口风格,和WS_EX_CLIENTDEGE扩展窗口风格的定义。

    WS_BORDER Creates a window that has a border.创建一个有边界的窗口。


    WS_EX_CLIENTEDGE Specifies that a window has a 3D look — that is, a border with a sunken edge.指定窗口具有3D外观,也即是一个下沉的边缘。


    2.在此之前先简单说下GetWindowRect和GetClientRect的区别

    GetWindowRect获取窗口的整个区域,包括菜单,标题栏,边界。很明显加了WS_BORDER与WS_EX_CLIENTEDGE画出的边界不属于客户区。

    GetClientRect获取的窗口的客户区,这里是在用于给用户作图用的。 

    3.总结的现象


     http://

    以上是创建CWnd时的统计的结果。很多时候我们需要通过ModifyStyleEx修改窗口风格,然后需要使用SetWindowPos来改变窗口风格。


    4.以自绘CListBox来举例使用

    直接附上我创建带有WS_BORDER和WS_EX_CLIENTEDGE风格CTListBox的例子


    1. DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP|WS_VSCROLL  
    2. |LBS_NOTIFY|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS|LBS_NOINTEGRALHEIGHT|LBS_EXTENDEDSEL;  
    3.   
    4. m_tlstbox.Create(dwStyle, CRect(10,10,110,110), this, ID_XLISTBOX);  
    5. DWORD dwExStyle = WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR  
    6. |WS_EX_NOPARENTNOTIFY|WS_EX_CLIENTEDGE;  
    7. m_tlstbox.ModifyStyleEx(0, dwExStyle);  

    1. CRect rcWnd;  
    2. m_tlstbox.GetWindowRect(rcWnd);  
    3.   
    4.   
    5. CRect rc;  
    6. m_tlstbox.GetClientRect(rc);  


    我是应用ModifyStyleEx来给CTListBox增加扩展风格的。下面列出应用WS_BORDER和WS_EX_CLIENTEDGE的四种情况。


    细心的朋友会发现,在此图第三个和第四个窗口的客户区和之前CWnd的窗口区域不一样。共通点,都是WS_EX_CLIENTEDGE没用。

    我在

    1. void CTListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)  
    2. {  
    3.     CRect rcWnd;  
    4.     GetWindowRect(rcWnd);  
    5.   
    6.     CRect rcClient;  
    7.     GetClientRect(rcClient);  
    8. }  
    里面测试的结果也是如此。

    原来我们通过ModifyStyleEx改变窗口扩展风格后,需要使用

    1. m_tlstbox.SetWindowPos(&wndTop, 10,10,0,0, SWP_DRAWFRAME | SWP_NOSIZE);  
    来确保刚才添加的扩展风格被应用了。


    虽然MSDN说ModifyStyleEx会调用SetWindowPos这个API来设定窗口位置,但是没用。

    我们必须用如上的语句手动设置。

    5.至于为什么不能使用ModifyStyle或者ModifyStyleEx正确的修改窗口风格?

    MSDN的描述如下:

    Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly.


    6.但是经过研究发现使用ModifyStyleEx并带上SWP_FRAMECHANGED也能改变Frame Style,为什么呢?

    1. m_xlstbox.ModifyStyleEx(0, dwExStyle, SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED);  
    也可以正确的改变窗口的frame style,为什么呢?因为ModifyStyleEx和SetWindowPos都是调用::SetWindowPos这个API。虽然是MSND没有为ModifyStyleEx指定了该风格,但是SetWindowPos具有的nFlags我们都可以使用。

    7.继续深究,为什么带有SWP_FRAMECHANGED能改变窗口的Frame Style呢?我找到原因了。

    因为带有SWP_FRAMECHANGED标识,会向该窗口发送WM_NCCALCSIZE消息,我们可以手动拦截该消息,使WS_EX_CLIENTEDGE永远不被调用,但是最好不要这样。

    至于WM_NCCALCSIZE如何实现的,那可是微软的秘密了。虽然不能看到他们的代码,但是我猜也是在这个消息的处理函数根据窗口的风格(例如,标题,菜单,滚动条,状态栏等等)来划分客户区的吧。

    有关窗口的其他框架风格如WS_THICKFRAME,   WS_SIZEBOX。下次再总结。。吃饭去了。。。。

    展开全文
  • DWORD dwStyle = WS_CHILD | WS_VISIBLE; m_twnd.Create(NULL, NULL, dwStyle, CRect(10,10,110,110), this, 0); 每次研究一点东西,都没有记录,下次需要的时候有浪费时间...这2天研究了一下WS_BORDER和WX_EX_CLI

    	DWORD dwStyle = WS_CHILD | WS_VISIBLE;
    	m_twnd.Create(NULL, NULL, dwStyle, CRect(10,10,110,110), this, 0);

    每次研究一点东西,都没有记录,下次需要的时候有浪费时间重新去研究。本人就是个没有总结习惯的人,这样等于没用积累,实在不行。

    这2天研究了一下WS_BORDER和WX_EX_CLIENTEDGE的不同,以及在动态创建,和窗口绑定时候效果的不同。

    下面开始:


    1.先看MSDN有关WS_BORDER窗口风格,和WS_EX_CLIENTDEGE扩展窗口风格的定义。

    • WS_BORDER Creates a window that has a border.创建一个有边界的窗口。

    • WS_EX_CLIENTEDGE Specifies that a window has a 3D look — that is, a border with a sunken edge.指定窗口具有3D外观,也即是一个下层的边缘。


      比如,我们直接从CWnd继承一个CTestWnd。

      那么当我们动态创建的时候有



    展开全文
  • 如何区分WS_POPUP、WS_OVERLAPPED和WS_CHILD 转载gwzz1228最后发布于2012-07-25 11:58:47阅读数 13625收藏 展开 除了窗口类以外,还有成百上千种窗口风格供用户指定窗口的绘制及其行为。其中有 3种最重要的风格...

    如何区分WS_POPUP、WS_OVERLAPPED和WS_CHILD

    转载gwzz1228 最后发布于2012-07-25 11:58:47 阅读数 13625  收藏

    展开

    除了窗口类以外,还有成百上千种窗口风格供用户指定窗口的绘制及其行为。其中有 3种最重要的风格创建了对应3种最基本的窗口类型:重叠窗口、弹出窗口和子窗口。
    ■ 重叠窗口(overlapped window),具有应用程序主窗口的全部特点。它的非客户区包括一个可伸缩的框架、菜单条、标题栏和最小化、最大化按钮。
    ■ 弹出窗口(popup window),具有消息框或者对话框的全部特点。它的非客户区包括一个固定大小的框架和一个标题栏。

    ■ 子窗口(child window),具有类似按钮控件的全部特点。它没有非客户区,窗口的处理过程负责绘制窗口的每个部分。

    ///

    WS_POPUP WS_OVERLAPPED WS_CHILD

      Overlapped Windows

    An overlapped window is a top-level window that has a title bar, border, and client area; it is meant to serve as an application's main window. It can also have a window menu, minimize and maximize buttons, and scroll bars. An overlapped window used as a main window typically includes all of these components.

      By specifying the WS_OVERLAPPED or WS_OVERLAPPEDWINDOW style in the CreateWindowEx function, an application creates an overlapped window. If you use the WS_OVERLAPPED style, the window has a title bar and border. If you use the WS_OVERLAPPEDWINDOW style, the window has a title bar, sizing border, window menu, and minimize and maximize buttons.

    Pop-up Windows

      Pop-up windows are top-level windows and are connected to the desktop window's child windows list. Applications usually use pop-up windows for dialog boxes. The main difference between pop-up and overlapped windows is that pop-up windows need not have captions and overlapped windows must have captions. When a pop-up window does not have a caption, it can be created without a border. Pop-up windows may own other top-level windows or be owned by other top-level windows or both. All pop-up windows have the WS_CLIPSIBLINGS style, even if it was not specified. Pop-up windows must not be created with the CW_USEDEFAULT value for either the position or the size of the window. Pop-up windows that use CW_USEDEFAULT will exist but will have no size or no position or both. Overlapped windows are usually reserved for your application's main window and, in fact, are sometimes called Main windows or Frame windows. Pop-up windows are usually used to communicate with the user in the form of Dialog boxes and Message boxes.

      A pop-up window is a special type of overlapped window used for dialog boxes, message boxes, and other temporary windows that appear outside an application's main window. Title bars are optional for pop-up windows; otherwise, pop-up windows are the same as overlapped windows of the WS_OVERLAPPED style.

      You create a pop-up window by specifying the WS_POPUP style in CreateWindowEx. To include a title bar, specify the WS_CAPTION style. Use the WS_POPUPWINDOW style to create a pop-up window that has a border and a window menu. The WS_CAPTION style must be combined with the WS_POPUPWINDOW style to make the window menu visible.

      Child Windows

    Child windows must have a parent window and are confined to the client area of their parent. This is the major distinction between child windows and overlapped and pop-up windows. Child window parents can be top-level windows or other child windows. Child windows are positioned from their parent window's upper-left corner and not from the upper-left of the screen as are top-level windows. Child windows are clipped to the client area of their parent. Controls in a dialog box are child windows whose parent is the dialog box. Child windows must not be created with the CW_USEDEFAULT value for either the position or size of the window. Child windows that use CW_USEDEFAULT will exist but will have no size or position or both.

      A child window has the WS_CHILD style and is confined to the client area of its parent window. An application typically uses child windows to divide the client area of a parent window into functional areas. You create a child window by specifying the WS_CHILD style in the CreateWindowEx function.

      A child window must have a parent window. The parent window can be an overlapped window, a pop-up window, or even another child window. You specify the parent window when you call CreateWindowEx. If you specify the WS_CHILD style in CreateWindowEx but do not specify a parent window, the system does not create the window.

      A child window has a client area but no other features, unless they are explicitly requested. An application can request a title bar, a window menu, minimize and maximize buttons, a border, and scroll bars for a child window, but a child window cannot have a menu. If the application specifies a menu handle, either when it registers the child's window class or creates the child window, the menu handle is ignored. If no border style is specified, the system creates a borderless window. An application can use borderless child windows to divide a parent window's client area while keeping the divisions invisible to the user.

     

    下面是谷歌翻译,哈哈。。。

     

    / / /
    WS_POPUP WS_OVERLAPPED WS_CHILD
      重叠的窗口
      一个重叠窗口是顶层窗口有一个标题栏,边框和客户区,它的目的是作为一个应用程序的主窗口。 它也可以有一个窗口菜单,最小化和最大化按钮和滚动条。 重叠的窗口作为主窗口使用通常包括所有这些组件。
      通过CreateWindowEx函数中指定的WS_OVERLAPPED或WS_OVERLAPPEDWINDOW风格,一种应用程序创建一个重叠的窗口。 如果您使用WS_OVERLAPPED风格,窗口有一个标题栏和边框。 如果您使用WS_OVERLAPPEDWINDOW风格,窗口有一个标题栏,边框大小,窗口菜单,最小化和最大化按钮。
      弹出窗口
      弹出窗口是顶级窗口,并连接到桌面窗口的子窗口的列表。 应用程序通常使用对话框弹出窗口。 主要的区别弹出和重叠的窗口是弹出式窗口不需要有标题和重叠的窗口必须有标题。 当一个弹出窗口没有标题,它可以创建无边框。 弹出式窗口可能拥有其他顶级窗口或由其他顶级窗口或两者拥有。 所有弹出窗口都具有WS_CLIPSIBLINGS风格,即使是没有指定。 弹出窗口不能创建与CW_USEDEFAULT值无论是位置或窗口的大小。 弹出窗口,使用CW_USEDEFAULT会存在,但不会有任何大小或没有能力或两者兼而有之。 重叠的窗口通常是保留给应用程序的主窗口,而事实上,有时也被称为主窗口或框架窗口。 弹出窗口通常用于与用户在对话框的形式和消息框。
      一个弹出窗口是一个特殊类型的重叠窗口的对话框,消息框使用,以及其他外部的应用程序的主窗口中出现的临时窗口。 标题栏的弹出式窗口选择,否则,弹出窗口作为窗口重叠的WS_OVERLAPPED风格相同。
    您创建一个通过指定CreateWindowEx WS_POPUP风格的弹出窗口。 要包含一个标题栏,指定WS_CAPTION样式。 使用WS_POPUPWINDOW风格创建一个弹出窗口,具有边框和窗口菜单。 该WS_CAPTION样式必须结合WS_POPUPWINDOW风格使窗口菜单中可见。
      子窗口
      子窗口必须有一个父窗口,并只限于其母公司的客户区。 这是在子窗口和重叠和弹出窗口的主要区别。 子窗口家长可以顶层窗口或其他子窗口。 子窗口的位置,从他们的父窗口的左上角,而不是从上层作为屏幕的左侧是顶层窗口。 子窗口是夹在他们父母的客户区。 在一个对话框中的控件的子窗口,其母公司是对话框。 子窗口创建不能为任何位置或窗口的大小CW_USEDEFAULT值。 子窗口,使用CW_USEDEFAULT会存在,但不会有任何大小或位置或两者兼而有之。
      有一个子窗口WS_CHILD样式,并只限于它的父窗口的客户区。 应用程序通常使用子窗口功能区划分成一个父窗口客户区。 您创建一个通过指定CreateWindowEx函数WS_CHILD样式的子窗口。
      一个子窗口必须有一个父窗口。 父窗口可以是重叠的窗口,弹出一个窗口,甚至是另一个子窗口。 您指定的父窗口时调用CreateWindowEx。 如果您指定在CreateWindowEx WS_CHILD样式,但没有指定一个父窗口,系统不创建窗口。
      一个孩子,但没有一个窗口客户区的其他功能,除非他们明确要求。 应用程序可以请求一个标题栏,窗口菜单,最小化和最大化按钮,边框,滚动窗花一个孩子,但一个子窗口不能有菜单。 如果应用程序指定一个菜单句柄,或者当它注册孩子的窗口类或创建子窗口,菜单句柄将被忽略。 如果没有指定边框样式,系统将创建一个无边框窗口。 应用程序可以使用无国界划分一个子窗口的父窗口的客户区的划分,同时保持对用户不可见。

    【转载】http://www.cnblogs.com/ziwuge/archive/2010/12/27/1917817.html

    展开全文
  • WS_CAPTION必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。 WS_CHILD说明窗口为子窗口,不能应用于弹出式窗口风格(WS_POPUP)。 WS_CHILDWINDOW同WS_CHILD。 WS_...
  • 1.WS_BORDER = 0x00800000  创建一个带边框的窗口。 2.WS_CAPTION = 0x00C00000  必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。(创建一个有标题框的窗口(包括WS_BODER...
  • WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。 WS_CHILD 说明窗口为子窗口,不能应用于弹出式窗口风格(WS_POPUP)。 WS_CHILDWINDOW 同WS_CHILD。 WS_...
  • WS_窗口风格常量

    2018-10-25 11:08:00
    WS_窗口风格常量 WS_BODER 窗口具有细线边框 WS_CAPTION 窗口具有标题栏(包含 WS_BODER) WS_CHILD 创建一个子窗口(此风格不能与 WS_POPUP 一起使用 ) WS_CHILDWINDOW 与 WS_CHILD 相同 WS_...
  • Use the WS_POPUPWINDOW style to create a pop-up window that has a border and a window menu. The WS_CAPTION style must be combined with the WS_POPUPWINDOW style to make the window menu visible. ...
  • POPUP = &H80000000 '弹出式窗口 Private Const WS_BORDER = &H800000 '单边框窗口 Private Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU) '具有单边框、标题栏菜单的弹出式窗口 Private Const WS_...
  • 如果想无边框,直接去掉WS_THICKFRAME不就行了嘛。那为什么还要有WS_THICKFRAME风格,再费劲去掉边框了? 没有WS_THICKFRAME会带来很多问题: 1.没有WS_THICKFRAME,有WS_SYSMENU,就没办法通过相应WM_...
  • //也可以根据处理位置的需要进行付值if((style & WS_BORDER) == WS_BORDER)m_FrameWidth = ::GetSystemMetrics(SM_CXBORDER);if((style & WS_THICKFRAME) == WS_THICKFRAME)m_FrameWidth = ::GetSystemMetrics(SM_...
  • 在用CreateWindowEx创建窗口的时候,如果第一个参数赋值...CreateWindowEx(WS_EX_TOOLWINDOW,szWindowClass,"Title",WS_BORDER |WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_MINIMIZEBOX | WS_VIS
  • MFC窗口风格(WS_style/WS_EX_style)

    千次阅读 2011-12-12 22:13:33
    WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。 WS_CHILD 说明窗口为子窗口,不能应用于弹出式窗口风格(WS_POPUP)。 WS_CHILDWINDOW 同WS_CHIL
  • 窗口样式

    2016-05-18 17:13:58
    WS_BORDER WS_CAPTION WS_CHILD WS_CHILDWINDOW WS_CLIPSIBLINGS WS_DISABLED WS_DLGFRAME WS_GROUP WS_HSCROLL WS_ICONIC WS_MAXIMIZE WS_MAXIMIZEBOX WS_MINIMIZE WS_MINIMIZEBOX WS_OVERLAPPED WS_OVERLAPPED...
  • Windows常见窗口样式和控件风格

    千次阅读 2011-11-01 14:27:12
    WS_BORDER  带单边框 WS_CAPTION 带标题框和边框(和WS_TILED样式相同,包括WS_BODER风格) WS_CHILD 创建一个子窗口。这个风格不能与WS_POPUP风格合用 WS_CHILDWINDOW 与WS_CHILD相同 WS_CLIPCHILDREN...
  • MFC 去掉CWnd的边框

    2017-03-10 19:09:00
    使用继承CWnd的控件,总是有边框,使用ModifyStyle(WS_BORDER,0); 不能去掉边框,包括SetWindowLong设置去掉WS_BORDER, 也不行。 最后找到了方法就是ModifyStyleEx(WS_EX_CLIENTEDGE, NULL, SWP_DRAWFRAME); 成功...
  • WS_OVERLAPPEDWINDOW

    千次阅读 2015-08-25 08:24:33
    #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |WS_MINMIZEBOX | WS_MAXMIZEBOX) WS_OVERLAPPED:层叠的窗口需要有一个标题栏和一个边框 WS_CAPTION:带有标题栏的窗口 WS...
  • 谈谈WS_EX_CLIENTEDGE窗口风格

    万次阅读 2013-06-06 15:22:14
    关于该风格要注意几点的是: WS_EX_CLIENTEDGE窗口风格并...通过对话框模版创建的控件ListCtrl,如果你指定了WS_BORDER,这时WS_BORDER将被拿掉,而WS_EX_CLIENTEDGE会被设置上。但是如果你通过create手动创建则不会
  • 转-WS Window Styles中文说明及在c#中的定义使用 转载weixin_30922589最后发布于2018-06-26 10:44:00阅读数 8收藏 展开 转自:CSDN 博主:微wx笑,链接:... 窗口风格(Window style) WS_BORDER ...
  • MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个“Border”项,改变该项的值就... WS_BORDER - Thin-line border,不能调整大小;  WS_DLGFRAME - dia
  • MFC窗口风格 WS_style 和 WS_EX_style

    千次阅读 2015-09-02 13:58:14
    窗口风格(Window style) WS_BORDER 有边框窗口 ...WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。 WS_CHILD 说明窗口为子窗口,不能应用于

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,426
精华内容 5,770
关键字:

ws_border