zoukankan      html  css  js  c++  java
  • windows 编程 之 问题解决笔记

    问题目录:

    • 1、如何隐藏和显示窗口
    • 2、InvalidateRect在连续使用鼠标或光标时暂时不起作用
    • 3、在VC项目里自己添加头文件和cpp文件在编译阶段报错
    • 4、在static 控件里添加子控件或为SS_WHITETECT的话,如何重画背景区域
    • 5、子窗口类别化时,新的消息处理函数的 消息WM_CREATE 不会被执行 



    1、如何隐藏和显示窗口

    (首先程序框架参考 另一篇博文

    BOOL WINAPI SetWindowPos(
      _In_     HWND hWnd,
      _In_opt_ HWND hWndInsertAfter,  //z轴的位置 如 HWND_TOPMOST
      _In_     int  X,
      _In_     int  Y,
      _In_     int  cx,    // nwidth
      _In_     int  cy,  // nHeight
      _In_     UINT uFlags     // 可以设置隐藏 和 显示窗口
    );
    BOOL WINAPI GetWindowRect(
      _In_  HWND   hWnd,
      _Out_ LPRECT lpRect
    );

    若要使用SetWindowPos 来隐藏和显示 窗口于同一位置,可以结合使用 GetWindowRect 函数来实现:
    GetWindowRect(hwnd3,&rect3);
    SetWindowPos(hwnd3,HWND_TOPMOST,rect3.left,rect3.top,rect3.right-rect3.left,rect3.bottom-rect3.top,SWP_HIDEWINDOW);
    SetWindowPos(hwnd3,HWND_TOPMOST,rect3.left,rect3.top,rect3.right-rect3.left,rect3.bottom-rect3.top,SWP_SHOWWINDOW);

     显示和隐藏窗口 一个跟简单的函数是 ShowWindow

    BOOL WINAPI ShowWindow(
      _In_ HWND hWnd,
      _In_ int  nCmdShow
    );
    可通过如下代码简单实现:
    ShowWindow(hwnd2,SW_HIDE);
    ShowWindow(hwnd2,SW_SHOW);

     2、InvalidateRect在连续使用鼠标或光标时暂时不起作用

    由于WM_PAINT消息的优先等级比较低,所以,如果您还在使用鼠标或者光标键移动滚动条的话,这个消息将不会立即被处理。

    指导书说可以:

    可以在InvalidateRect之后增加下面的叙述:

    UpdateWindow (hwnd) ;

    但这会使得键盘和鼠标处理变慢。

    另外一个解决办法是,在别的消息里来处理事务。

    3、在VC项目里自己添加头文件和cppw文件在编译阶段报错

    VC的编译器有时不是很灵活,比如 自己的头文件里有使用windows.h头文件声明到的类型,如果不在include "customize.h"前 include<windows.h>则会报错。

    4、在static 控件里添加子控件或为SS_WHITETECT的话,如何重画背景区域

    这两种情况,以下消息 :case WM_CTLCOLORSTATIC : 里的设置 如:

    SetTextColor ((HDC) wParam, crPrim[i % 3]) ;

    SetBkColor ((HDC) wParam, GetSysColor (COLOR_BTNHIGHLIGHT));

    return (LRESULT) hBrushStatic ;

    将不起作用,只能在窗口子类别化(Window Subclassing)后在WM_PAINT 中自行手动绘制来重画。

     

    5、子窗口类别化时,新的消息处理函数的 消息WM_CREATE 不会被执行 

    因为是先createWindow()产生窗口句柄hwnd,再在SetWindowLong中通过指定新的处理函数的,所以在指定之后,如果需要执行新的消息处理函数的 WM_CREATE 里的内容,可以在子窗口类别化后,自己发送消息SendMessage(hwnd,WM_CREATE,0,0);即可执行。

     

    
    
  • 相关阅读:
    Shell编程—用户输入
    Shell编程—结构化命令
    Shell编程—基础脚本
    跳表
    分布式项目——电商秒杀
    Dubbo详解
    Kafka工作流程
    Kafka内部实现原理
    Zk实现分布式锁
    Leetcode::Pathsum & Pathsum II
  • 原文地址:https://www.cnblogs.com/BensonLaur/p/5289222.html
Copyright © 2011-2022 走看看