精华内容
下载资源
问答
  • C++ Windows的窗口编程方法解释,包括MFC方式的SDI、MDI方式
  • 1.1.窗口函数: dev_clear_window 清除活动图形窗口内容 dev_close_window 关闭活动图形窗口 dev_disp_text 在当前图形窗口中显示文本 dev_display 在当前图形窗口中显示图像对象 dev_get_window 返回活动图形...
    1.1.窗口函数:
    	dev_clear_window      清除活动图形窗口内容
    	dev_close_window      关闭活动图形窗口
    	dev_disp_text         在当前图形窗口中显示文本
    	dev_display           在当前图形窗口中显示图像对象
    
    	dev_get_window        返回活动图形窗口句柄
    	dev_open_window       打开一个新图形窗口
    	dev_set_color         设置一或多种输出颜色
    	dev_set_colored       设置多种输出颜。
    	dev_set_draw          定义区域填充模式
    
    	dev_set_line_width    定义区域轮廓输出线宽
    	dev_set_lut           设置“查找表”(lut)
    	dev_set_paint         定义灰度值输出模式-3D or 2D
    	dev_set_part          修改显示的图像部分
    
    	dev_set_shape         定义区域输出形状
    	dev_set_window        激活图形窗口
    	dev_set_window_extents更改活动图形窗口位置和大小
    2.实例:
    
    实例1.1:多窗口
    
    read_image (image1,'mreut')
    read_image (image2, 'fabrik')
    read_image (image3, 'monkey')
    read_image (image4, 'bk45')
    
    get_image_size (image4, Width, Height)
    
    dev_close_window ()                                    //关闭当前窗口
    dev_open_window (0, 0, -1,-1, 'black', winHnd1)        //打开4个窗口-自适应大小
    dev_open_window (0, 0,-1,-1, 'black', winHnd2)
    dev_open_window (0, 0,-1,-1, 'black', winHnd3)
    dev_open_window (0, 0, Width, Height, 'black', winHnd4)//打开固定尺寸窗口
    
    dev_get_window (CurrentWindowID)                       //获取当前窗口句柄=winHnd4
    
    dev_set_window(winHnd1)                                //设置当前窗口位winHnd1
    threshold (image1, Region1, 100, 200)
    *regiongrowing (image1, Regions1, 3, 3, 6, 100)
    dev_clear_window()                                     //清除当前窗口
    dev_display (Region1)                                  //在当前窗口显示
    
    dev_set_window(winHnd2)
    dev_display (image2)
    
    dev_set_window (winHnd3)
    dev_set_color('white' ) //显示区域颜色
    *dev_set_colored (12)   //不同颜色显示
    dev_set_draw ('margin') //显示图形轮廓
    
    dev_display (image3)
    
    dev_set_window(CurrentWindowID) 
    dev_display (image4)
    
    *当前窗口中显示文本-必须放在显示图像后面,放到前面看不到文字
    dev_disp_text ('Display some text in a box', 'image', 30, 30,'green', ['box'], ['false'])
    实例1.2:显示文本
    	dev_open_window(0,0,-1,-1,'black',winHnd)
    	dev_set_color('green')
    	disp_arrow(winHnd,255-20,255-20,255,255,1)                    //画箭头-缩放文本消失
    
    	disp_message(winHnd,'Tom','window',20,20,'blue','true')       //显示文本-缩放文本消失
    	dev_set_color('red')
    	set_tposition(winHnd,40,40)                                   //设置光标位置
    	write_string(winHnd,'Bob')                                    //简单写字符串-缩放文本消失
    	set_tposition(winHnd,255,255)
    
    	dev_disp_text('Jim','window', 60,60,'blue',['box'],['false'] )//缩放文本不消失
    实例2:更改在窗口显示的位置
    
    dev_close_window ()
    read_image (For5, 'for5')
    get_image_size (For5, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_display (For5)
    stop ()
    dev_set_window_extents (-1,-1,Width/2,Height/2)
    dev_display (For5)
    stop ()
    dev_set_window_extents (200,200,-1,-1)

     实例3:显示区域的形状

    read_image(Image,'monkey')
    threshold(Image,Region,128,255)
    connection(Region,Regions)
    dev_set_shape('rectangle1')
    dev_set_draw('margin')
    dev_set_line_width(5)
    dev_clear_window()
    dev_display(Regions)
    实例4:显示的图像部分(动态:类似图片从远处走来)
    read_image (Image, 'fabrik')
    for i := 1 to 240 by 10
      dev_set_part (i, i, 511-i, 511-i)
      dev_display (Image)
      wait_seconds(0.5)
    endfor
    dev_set_part (1, 1, -1, -1)
    dev_display (Image)
    
    示例5:显示3D模式
    read_image(Image,'fabrik')
    dev_set_paint('3d_plot')
    dev_display(Image)
    示例6:轮廓模式下区域输出的线宽
    read_image(image,'monkey')
    threshold(image,Region,128,255)
    dev_set_draw('margin')//定义区域的填充模式-轮廓
    dev_set_line_width(5)
    dev_clear_window ()
    dev_display(Region)
    示例7:查找表
    dev_close_window ()
    read_image (For5, 'for5')
    get_image_size (For5, Width, Height)
    dev_open_window (0, 0, Width, Height, 'black', winHnd)
    dev_display (For5)
    dev_set_lut ('rainbow')
    dev_display (For5)
    stop ()
    dev_set_lut ('default')
    dev_display (For5)
    stop ()
    dev_set_part (100, 100, 300, 300)
    dev_display (For5)
    
    3.备注:
    dev_open_window( : : Row, Column, Width, Height, Background : winHnd)
    用途:打开一新图形窗口,用于显示图标对象
    参数:
    	Row    y=0  ≤ Row整数→左上角行索引
    	Column x=0  ≤ Column整数→左上角列索引
    	Width=512   ≤Width整数→窗口宽度 [-1]
    	Height=512  ≤Height整数→窗口高度[-1]
    
    	Background='black' 整数,字符串→新窗口背景颜色
    	winHnd窗口句柄→输出
    
    
    dev_set_color( : : ColorName : )
    用途:用于在图形窗口中显示区域XLD和其他几何对象的颜色
    参数:ColorName='white' 字符串(数组)→
          ['black', 'gray', 'red', 'green', 'blue', '#003075', '#e53019', '#ffb529']
    	  
    dev_set_colored( : : NumColors : )
    用途:用一组预定义颜色在图形窗口中以不同的颜色显示区域,XLD和其他几何对象元组
    参数:NumColors =6整数→值列表= 3、6、12
    
    dev_set_draw( : : DrawMode : )
    用途:定义区域的填充模式
    参数:DrawMode='fill'区域填充;'margin'显示轮廓
    
    dev_set_line_width( : : LineWidth : )
    用途:定义显示区域轮廓线宽度(像素)
    参数:LineWidth=1  整数→线宽
    
    dev_set_paint( : : Mode : )
    用途:显示3D模式
    
    参数:Mode='default','3d_plot'
    
    dev_set_part( : : Row1, Column1, Row2, Column2 : )
    用途:设置在图形窗口中显示的图像部分
    参数:Row1,Column1 y,x 整数→所选图像零件左上角的行列
          Row1,Column1 y,x 整数→所选图像零件右下角的行列
    	  
    dev_set_window( : : WindowHandle : )激活图形窗口
    
    dev_set_window_extents( : : Row, Column, Width, Height : )
    用途:更改当前活动图形窗口的位置和/或大小
    参数:|整数| or -1 负坐标忽略
    dev_set_shape( : : Shape : )
    用途:定义用于显示区域的形状
    参数:Shape='original'  形状保持不变
    		'outer_circle':每个区域均以最小圆显示
    		'inner_circle':每个区域均以最大圆显示
    		'ellipse':     每个区域都由一个椭圆形显示
    		'rectangle1':  每个区域均由平行于坐标轴最小周围矩形显示
    		'rectangle2':  每个区域均以最小周围矩形显示
    		'convex':      每个区域均以其凸包显示
    		'icon':        每个区域都由在重心中设置的图标显示 。 set_icon
    dev_set_lut( : : LutName : )
    用途:设置活动图形窗口的查找表
    参数:LutName='default' → string values of look-up-table (RGB) or file name.
    		['linear', 'inverse', 'sqr', 'inv_sqr', 'cube', 
    		 'inv_cube', 'sqrt', 'inv_sqrt', 'cubic_root', 'inv_cubic_root',
    		 'color1', 'color2', 'color3', 'color4', 'three', 'six', 
    		 'twelve', 'twenty_four', 'rainbow', 'temperature', 'cyclic_gray',
    		 'cyclic_temperature', 'hsi', 'change1', 'change2', 'change3']
    	    File extension: .lut
    dev_disp_text( : : String, CoordSystem, Row, Column, Color, GenParamName, GenParamValue : )
    用途:在当前图形窗口显示文本n
    参数:
    	String string(-array)  文本元组。元组每个值将显示在一行中
    	CoordSystem  ='window' 窗口/'image'图像坐标(缩放)
    	Row   y(-array)=12     (integer,real,string)垂直对齐方式或行坐标
    						   List: 12, 'bottom', 'center', 'top'
    	Column x(-array)=12    (integer,real,string) 水平对齐方式或列坐标
    						   List: 12, 'center', 'left', 'right'
    	Color ='black'         string(-array)文本颜色字符串元组
    					List: 'black', 'blue', 'coral'珊瑚, 'cyan'青色, 'forest green'森林绿,'green', 
    						  'lime green'石灰绿色, 'magenta'洋红, 'red', 'slate blue'板岩蓝, 'yellow'
    
    	GenParamName name(-array)=[] →   (string)通用参数名称
    					List: 'border_radius', 'box', 'box_color', 'box_padding','shadow', 
    						  'shadow_color', 'shadow_dx', 'shadow_dy', 'shadow_sigma'
    	GenParamValue value(-array)=[] → (string,integer,real)通用参数值
    					List: 5.0, 'black', 'blue', 'false', 'forest green', 'red', 'true', 'white'
    
    通用参数:
    	'box'='true'          文本写在box内
    	'box_color'=#fce9d4”  浅橙色-框的颜色['white','red','#aa00bba0']
    	'shadow'='true'       框下方显示阴影
    	'shadow_color'='true' 设置阴影颜色 如box_color=None,则为#f28d26深橙否则白色
    	'border_radius'=2     |real|框角圆度。尖角=0,较平滑角设置更高值
    	'box_padding'=0       |real|控制框在文本周围扩展到多少像素
    	'shadow_sigma'=1.5    |real|控制框下方阴影模糊量。0可获得清晰阴影
    	'shadow_dx','shadow_dy'=2 real像素单位 控制阴影在列和行方向上偏移量
    
    说明:
    	一个位置则为每个元素显示一个文本行
    	多个位置仅允许单字符串(必用'\n')或每位置一字符串
    
    	预定义值'bottom'仅用在窗口

     

    展开全文
  • Windows编程之注册窗口类 介绍了 注册窗口类。接下来就是创建窗体。   我们用Visual Studio创建一个win32项目上会自动生成一个创建窗体函数。如下:  // // 函数: InitInstance(HINSTANCE, int) /
    
    
    Windows编程之注册窗口类 介绍了 注册窗口类。接下来就是创建窗体。 
         我们用Visual Studio创建一个win32项目上会自动生成一个创建窗体函数。如下: 
    //
    //   函数: InitInstance(HINSTANCE, int)
    //
    //   目的: 保存实例句柄并创建主窗口
    //
    //   注释:
    //
    //        在此函数中,我们在全局变量中保存实例句柄并
    //        创建和显示主程序窗口。
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
    
       hInst = hInstance; // 将实例句柄存储在全局变量中
    
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    下面一句一句解释: 
    HWND hWnd; 
          h 是类型描述,表示句柄, Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄 。 通俗地说,如果把一个到处跑的人当作指针的话,那么HWND就是该人的身份证----我想应该是身份证号码 
      
    hInst是项目自动生成的一个全局变量,代码如下: HINSTANCE hInst; // 当前实例所以这句话的意识就是将实例句柄存储在全局变量中。 
    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 
     CreateWindow函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。函数原型为:
    HWND CreateWindow(
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HANDLE hlnstance,
    LPVOID lpParam);

    风   格    宏 解    释
    WS_border 单线边框
    WS_caption 有标题框的窗口(包括WS_BODER风格)
    WS_popup 作为一个弹出式窗口
    WS_child 作为子窗体(与WS_popup互斥)
    WS_disabled 窗口不能初始化,并且屏蔽与用户的交互
    WS_dlgframe 窗口的外观类似与对话框
    WS_group 作为窗体的控件,可以与其他控件组合
    WS_hscroll 窗口具有水平滚动条
    WS_vscroll 窗口具有垂直滚动条
    WS_maximize 初始状态为最大化的窗口
    WS_maximizebox 窗口右上角有一个最大化按钮
    WS_minimize 初始状态为最小化的窗口
    WS_minimizebox 窗口右上角有一个最小化按钮
    WS_overlappedwindow 这是一个宏组合。为了方便书写,它等价于WS_overlapped|WS_caption|WS_sysmenu|WS_thickframe|WS_minimizebox|WS_maximizebox
    WS_overlapped 边框重叠的窗口
    WS_sizebox 窗口的边框可以变化
    WS_sysmenu 在窗口的标题栏的最左上角有一个窗口菜单
    WS_tabstop 窗口作为控件,并且交互可以停留在这个控件上
    WS_visible 窗口建立的初始状态是可见的
    x,y,nWidth,nHeight 制定了窗口的位置和大小,x和y指定初始左定点坐标,nWidth和nHeight指定宽度和高度。 hWndParent 指向被创建窗口的父窗口或所有者窗口的句柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗口是可选的。 hMenu 菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。 hInstance 在早期的操作系统中,如Windows 95/98/Me,该参数指定与窗口相关的模块实例的句柄,而在较新的操作系统中,如Windows NT/2000/XP/7,可以不理睬该参数。 lpPraram 指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
    if (!hWnd)
       {
          return FALSE;
       }
    如果创建 窗口句柄 失败,则返回错误 
    ShowWindow(hWnd, nCmdShow);
    显示窗体,ShowWindow函数的原型为BOOL ShowWindow(HWND hWnd,int nCmdShow);第一个参数指定要显示窗口的句柄,第二个参数指定窗口的显示方式,如果加载应用程序提供了STARTUPINFO结构,则应用第一次调用ShowWindow函数时不理财该参数;否则,应用第一次调用ShowWindow函数时从WinMain函数的nCmdShow参数中获取实际值。在后续的函数调用中,nCmdShow的值可以说下表中的任意一个。 

    UpdateWindow(hWnd);
    
    如果窗口更新的区域不为空,UpdateWindow函数通过发送一个WM_PAINT消息来更新指定窗口的客户区。函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。(表中风格宏都应为大写,为方便阅读,我使用小写,写程序是须使用大写) 
    显   示    宏 结    果
    SW_forceminimize 在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数
    SW_hide 隐藏窗口并激活其他窗口
    SW_mazimize 最大化指定的窗口
    SW_minimize 最小化指定的窗口。
    SW_restore 激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志
    SW_show 在窗口原来的位置以原来的尺寸激活和显示窗口
    SW_showdefault 依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
    SW_showmaximized 激活窗口并将其最大化
    SW_showminimized 激活窗口并将其最小化
    SW_showminnoactive 窗口最小化,并不激活窗口,但激活窗口仍然维持激活状态
    SW_showna 以窗口原来的状态显示窗口,激活窗口仍然维持激活状态
    SW_shownoactivate 以窗口最近一次的大小和状态显示窗口,激活窗口仍然维持激活状态
    SW_shownormal 激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志
    展开全文
  • Visual C++实用编程技术——从C++、面向对象到窗口程序设计.rar
  • 要做一个带窗口界面的小软件,以前只用过c#,不知道vs怎么用的,还望各位大神给个教程什么的,我研究一下。。。
  • 基础的windows窗口类使用C++封装后的源码,点此下载,这是我的第一版本,还有很多功能没有实现。 代码实现效果如: TWnd* wnd; wnd->Create(IDD_DIALOG1,NULL,(LPARAM)wnd); //创建一个非模态窗口; TWnd* dlg; ...
  • C++游戏编程(1)——先做一个窗口

    万次阅读 2018-02-12 21:45:02
    C++游戏编程(1) Are you a game lover?如果是的,那么你想开发一个游戏吗?如果想,那就跟着我来吧。 一.一个窗口的开始 先看VS2017的初始窗口代码。 //cppgame1.cpp: 定义应用程序的入口点。 // #...

    C++游戏编程(1)

    Are you a game lover?如果是的,那么你想开发一个游戏吗?如果想,那就跟着我来吧。

    一.一个窗口的开始

    先看VS2017的初始窗口代码。

    //cppgame1.cpp: 定义应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "cppgame1.h"
    
    #define MAX_LOADSTRING 100
    
    // 全局变量: 
    HINSTANCE hInst;                                // 当前实例
    WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
    WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
    
    // 此代码模块中包含的函数的前向声明: 
    ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: 在此放置代码。
    
        // 初始化全局字符串
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_CPPGAME1, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
        // 执行应用程序初始化: 
        if (!InitInstance (hInstance, nCmdShow))
        {
            return FALSE;
        }
    
        HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CPPGAME1));
    
        MSG msg;
    
        // 主消息循环: 
        while (GetMessage(&msg, nullptr, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return (int) msg.wParam;
    }
    
    
    
    //
    //  函数: MyRegisterClass()
    //
    //  目的: 注册窗口类。
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASSEXW wcex;
    
        wcex.cbSize = sizeof(WNDCLASSEX);
    
        wcex.style          = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 0;
        wcex.hInstance      = hInstance;
        wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CPPGAME1));
        wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_CPPGAME1);
        wcex.lpszClassName  = szWindowClass;
        wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
        return RegisterClassExW(&wcex);
    }
    
    //
    //   函数: InitInstance(HINSTANCE, int)
    //
    //   目的: 保存实例句柄并创建主窗口
    //
    //   注释: 
    //
    //        在此函数中,我们在全局变量中保存实例句柄并
    //        创建和显示主程序窗口。
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       hInst = hInstance; // 将实例句柄存储在全局变量中
    
       HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    处理主窗口的消息。
    //
    //  WM_COMMAND  - 处理应用程序菜单
    //  WM_PAINT    - 绘制主窗口
    //  WM_DESTROY  - 发送退出消息并返回
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 分析菜单选择: 
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                // TODO: 在此处添加使用 hdc 的任何绘图代码...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // “关于”框的消息处理程序。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    

    在这段代码中,可以看见wWinMain函数是应用程序的入口,这里不多赘述。我们关注的是这个窗口如何听我们的去工作。现在,让我们做一个最简单的程序。

    二.小程序

    这是一个非常无厘头的程序,当你在“文件”菜单或启动时选择”对话框1“时,选”否“时会弹出1000个连续的对话框。
    源代码在GitHub里下载,现在先把主要源码给贴出:

    //cppgame1.cpp: 定义应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "cppgame1.h"
    
    #define MAX_LOADSTRING 100
    
    // 全局变量: 
    HINSTANCE hInst;                                // 当前实例
    WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
    WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
    HINSTANCE hi1;
    HWND hwnd = NULL;
    
    // 此代码模块中包含的函数的前向声明: 
    ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int,HWND&);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    Dialog1(HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: 在此放置代码。
    
    
        // 初始化全局字符串
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_CPPGAME1, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);
    
    
        // 执行应用程序初始化: 
        if (!InitInstance (hInstance, nCmdShow,hwnd))
        {
            return FALSE;
        }
    
        HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CPPGAME1));
    
        MSG msg;
        MessageBox(hwnd, _T("Create"),_T("cppgame1"),1);
        DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, Dialog1);
        // 主消息循环: 
        while (GetMessage(&msg, nullptr, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    
        return (int) msg.wParam;
    }
    
    
    
    //
    //  函数: MyRegisterClass()
    //
    //  目的: 注册窗口类。
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASSEXW wcex;
    
        wcex.cbSize = sizeof(WNDCLASSEX);
    
        wcex.style          = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc    = WndProc;
        wcex.cbClsExtra     = 0;
        wcex.cbWndExtra     = 0;
        wcex.hInstance      = hInstance;
        wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CPPGAME1));
        wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_CPPGAME1);
        wcex.lpszClassName  = szWindowClass;
        wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
        return RegisterClassExW(&wcex);
    }
    
    //
    //   函数: InitInstance(HINSTANCE, int)
    //
    //   目的: 保存实例句柄并创建主窗口
    //
    //   注释: 
    //
    //        在此函数中,我们在全局变量中保存实例句柄并
    //        创建和显示主程序窗口。
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow,HWND& hWnd)
    {
       hInst = hInstance; // 将实例句柄存储在全局变量中
    
       hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
       if (!hWnd)
       {
          return FALSE;
       }
    
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    处理主窗口的消息。
    //
    //  WM_COMMAND  - 处理应用程序菜单
    //  WM_PAINT    - 绘制主窗口
    //  WM_DESTROY  - 发送退出消息并返回
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 分析菜单选择: 
                switch (wmId)
                {
                case IDM_dialog1:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Dialog1);
                    break;
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                // TODO: 在此处添加使用 hdc 的任何绘图代码...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            MessageBox(hWnd, _T("EXIT"), _T("cppgame1"), 1);
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // “关于”框的消息处理程序。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    INT_PTR CALLBACK Dialog1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDCLOSE)
            {
                for(int i=0;i<=1000;i++)
                    MessageBox(hwnd, _T("NO"), _T("NO"), 4);
            }
            if (LOWORD(wParam) == IDOK)
            {
                MessageBox(hwnd, _T("OK"), _T("OK"), 4);
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }

    下载地址:https://github.com/ZhengPai/CppGame1-Windows-csdn.net-WindOA

    Bye-bye~

    展开全文
  • 窗口编程助手

    2002-10-14 00:00:00
    这是一个窗口编程助手,它的一些功能包括hWnd扫描、代码生成、窗口查找、隐藏多个窗口等等,是VB/C++窗口编程的好助手
  • SDK窗口编程,在C++builer6上编译通过 //--------------------------------------------------------------------------- #include #include #pragma hdrstop //------------------------------------------------...
    SDK窗口编程,在C++Builder6上编译通过.
    打开C++Builder6 IDE,新建一个Application应用程序,删除默认的窗口文件:即Unit1.cpp,Unit1.h,Unit1.dfm三个文件。打开和工程同名的.cpp文件,删除全部内容,输入如下内容:
    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <stdio.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #pragma argsused
    //---------------------------------------------------------------------------
    long __stdcall WndProc(HWND hwnd,UINT msg,WPARAM WParam,LPARAM LParam)
    {
        switch(msg)
        {
            case WM_CLOSE:
                PostQuitMessage(0);
                break;
            case WM_LBUTTONDOWN:
                MessageBoxA(0,"ok","提示",0);
                PostQuitMessage(0);
                break;
            case WM_PAINT:
            {
                HDC hdc;
                hdc = GetDC(hwnd);
    
                RECT rect;
                GetClientRect(hwnd,&rect);
                
                rect.left   = rect.right/2;
                rect.top    = rect.bottom/2;
                rect.right  = rect.left+50;
                rect.bottom = rect.top+30;
    
                DrawText(hdc,"hello",5,&rect,0);
    
                ReleaseDC(NULL,hdc);
            }
            default:
                return DefWindowProc(hwnd,msg,WParam,LParam);
        }
    
        return 0;
    }
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreHinstance, LPSTR, int)
    {
         WNDCLASS theClass ={0};
         char * lpszClassName = "hello";
         char * lpszTitle     ="测试窗口";
         HWND hwnd;
         MSG  msg;
    
         theClass.style       = 0;//缺省窗口风格
         theClass.lpfnWndProc = WndProc;
         theClass.cbClsExtra  = 0;//窗口类无扩展
         theClass.cbWndExtra  = 0;//窗口实例无扩展
    
         theClass.hInstance =  hInstance;
    
         //窗口的最小化图标为缺省图标,即窗口左上角图标
         //VC中资源ID为IDI_APPLICATION
         //在BCB中资源名为MAINICON
         theClass.hIcon=LoadIcon(hInstance,"MAINICON");
         //theClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//VC中窗口的最小化图标为缺省图标
    
         theClass.hCursor=LoadCursor(NULL,IDC_ARROW); // 窗口采用箭头光标
         theClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色
         theClass.lpszMenuName=NULL; //窗口无菜单
         theClass.lpszClassName=  lpszClassName; //窗口类名为"窗口"
    
         if(!RegisterClass(&theClass)) //如果注册失败 发出警告
         {
              MessageBeep(0);
              return FALSE;
         }
    
         hwnd=CreateWindow( lpszClassName, //窗口类名
          lpszTitle, //窗口标题名
          WS_OVERLAPPEDWINDOW, //窗口的风格
          CW_USEDEFAULT,
          CW_USEDEFAULT, //窗口左上角坐标值为缺省值
          CW_USEDEFAULT, CW_USEDEFAULT, //窗口的高和宽为缺省值
          NULL, //此窗口无父窗口
          NULL, //此窗口无子菜单
          hInstance, //创建此窗口的应用程序的当前句柄
          NULL //不使用该值
          );
    
         ShowWindow(hwnd,SW_SHOW);
         UpdateWindow(hwnd);
    
    
         while(true)
         {
             if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
             {
               if (msg.message == WM_QUIT)
                   break;
    
               TranslateMessage(&msg);
               DispatchMessage(&msg);
             }
    
    //         if (GetMessage (&msg, NULL, 0, 0))
    //         {
    //               TranslateMessage (&msg) ;
    //               DispatchMessage (&msg) ;
    //         }
    //         else
    //           break;
         }
         
         return msg.wParam; //消息循环结束 即程序结束时 将信息返回系统
    }
    PeekMessage与GetMessage函数处理不相同,两种方式都可以.PeekMessage是不阻塞的,GetMessage是线程阻塞的,内部处理退出消息,所以不用判断退出消息,关闭时,就跳到break结束循环。运行效果如下图:

    这个简单的窗口有什么用呢?是有用的:第一,了解窗口运行机制;第二,在嵌入式开中,特别是WINCE的开发,就是从这样一个简单的窗口开始,逐渐实现复杂的功能。
    在WM_PAINT消息中绘图如下:
        PAINTSTRUCT ps ={0};
        HDC hdc = BeginPaint(hwnd,&ps);
    
        //HPEN hPen = GetStockObject(WHITE_PEN);
        HPEN hPen = CreatePen(PS_DASHDOTDOT,1,RGB(255 , 0 , 0 ));
        HGDIOBJ oldPen = (HGDIOBJ)SelectObject(hdc,hPen);
        if(!oldPen)
        {
            int err = GetLastError();
            char buff[20]={0};
            itoa(err,buff,10);
            OutputDebugStringA(buff);
        }
        //画矩形
        Rectangle(hdc,20,30,80,120);
        //画线
        MoveToEx ( hdc , 20 , 10 , NULL );
        LineTo( hdc , 200 ,100);
    
        SelectObject(hdc, oldPen);
    
    
        DeleteObject(hPen);
        EndPaint(hwnd,&ps);


    展开全文
  • C++Windows编程之注册窗口

    千次阅读 2013-01-15 20:28:55
    我们用Visual Studio创建一个win32项目上会自动生成一个注册窗口类。如下: // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex....
  • Visual C++MFC编程实例

    2014-08-20 21:58:16
    Visual C++MFC编程实例,里面汇集MFC构造C++窗口程序的各种实例,能够满足目前大多数C/S软件的编写请求
  • 给定 n 个整数,找出平均数最大且长度为 k 的...利用一个滑动窗口,每次滑动时把窗口左端减去,把窗口右端加上,新总和再比较 class Solution { public: double findMaxAverage(vector<int>& nums, int k) {
  • int nCmdShow) //指明窗口如何显示 { MSG msg;//表示消息 /* typedef struct tagMSG { HWND hwnd; //windows identifier UINT message; //messages identifier WPARAM wParam; LPARAM lParam; //...
  • visual c++.net应用编程150例,包括了C++窗口编程的所有技巧.
  • C++控制台窗口界面的编程(基础)

    万次阅读 多人点赞 2018-05-31 15:36:37
     作为初学者,每一个学习 C、C++的人所面对的都是一个黑黑的窗口,从初识C++,再到一道一道的刷题,到进一步的ACM,这个黑色的窗口都一直陪伴着我们。无聊之余,自己用C++做了一个控制台的小界面,希望能让C++初学...
  • Windows,C++编程创建窗口的过程详解

    万次阅读 2015-07-10 17:31:55
    Windows,C++编程,创建窗口的是个步骤详解
  • tab窗口编程实例,一个完整的c++实例。
  •  // 显示窗口,刷新窗口客户区  ::ShowWindow(hwnd, nCmdShow);  ::UpdateWindow(hwnd);  // 从消息队列中取出消息,交给窗口函数处理,直到 GetMessage 返回 FALSE,结束消息循环  MSG msg;  while...
  • C++MFC编程实例

    2018-03-20 23:17:12
    第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种类型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口类...
  • //文件介绍 1. computeThread 多线程处理数据 2. icpDialog 窗口类 3. icpThread 线程类 4. tb_basedata 线程间通信数据类型 5. Xmutex 临界区 以上所有功能的实现都使用C++类封装
  • C++,win编程,获取当前选中win窗口输入数据; 可做学习参考,完成初步获取,待后续更新 。
  • 关于窗口C++编程,怎么发消息到QQ的框中。。。。。。。。。。。。。。。。。。。
  • 如果某个子窗口控件需要单独处理Windows消息来实现更强功能,就再为这个子窗口控件设置一个窗口过程,在此处理此子窗口控件的消息; 子类化的win32程序结构如下; #include LRESULT CALLBACK WndProc (HWND, UINT, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,749
精华内容 1,099
关键字:

c++窗口编程

c++ 订阅