控件,按钮

来源:互联网 发布:广州数控g72编程实例 编辑:程序博客网 时间:2024/04/29 05:17
1:关于窗口过程函数中的WM_CREATE中调用CreateWindow的问题
里面有个参数hinstance,由于
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAMwParam,LPARAMlParam)函数的传入参数中没有hInstance这一参数,所以要用相关的函数获取HInstance的值
方法一:GetWindowLong (hwnd, GWL_HINSTANCE)
方法二:((LPCREATESTRUCT)lParam)->hInstance
方法三:设hInstance为全局变量,因为通过调试发现,主窗口的hInstance和子窗口的是同一个hInstance,所以完全可以通过全局变量法。
2:子窗口的消息
当点击子窗口,子窗口就会想父窗口发送一个WM_COMMAND消息,消息的格式为:
LOWORD(wParam):子窗口ID,HIWORD(wParam):通知吗,lParam:子窗口句柄
3:窗口和句柄之间的相互获得
ID=GetWindowLong(hwndChild,GWL_ID);
ID=GetDlgCtrlID(hwndChild);
hwndChild=GetDlgItem(hwndParent,ID);
4:
//获取对话框的长和宽,依此作为按键的大小
 case   WM_CREATE :
                cxChar =LOWORD (GetDialogBaseUnits ()) ;
                cyChar =HIWORD (GetDialogBaseUnits ()) ;
//移动窗口函数
 MoveWindow(HWND hwnd,int x,int y,intnWidth,int nHeight,BOOL bRepaint)
//DrawItemStruct
typedef struct tagDRAWITEMSTRUCT { 
  UINT CtlType; 
  UINT CtlID; 
  UINT itemID; 
  UINT itemAction; 
  UINT itemState; 
  HWND hwndItem; 
  HDC hDC; 
  RECT rcItem; 
  ULONG_PTR itemData; 
} DRAWITEMSTRUCT; 
//FramRect,画矩形框架函数
int FrameRect(
  HDC hDC,         // handle to DC
  CONST RECT *lprc,  //rectangle
  HBRUSH hbr        // handleto brush
);
5:BS_OWNERDRAW
//使用BS_OWNERDRAW风格的按钮,当按钮被建立,按下,释放时都会发送一个WM_DRAWITEM的消息,此时按钮都会被重绘。
6:滚动条控件窗口类型
SBS_(TYPE)
7:窗口子类别化
OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i],GWL_WNDPROC,(LONG) ScrollProc)) ;
给窗口定义挂钩一个新的窗口过程函数。
在有子窗口的程序中,我们为子窗口指定一个子窗口的窗口过程函数,当子窗口获取焦点时,这时处理子窗口消息的就是子窗口的过程函数。
8:WM_CTLCOLORSCROLLBAR
wParam :HDC,lParam :HWND
注意:如果应用程序处理这个消息,它必须返回一个画刷的句柄,应用程序利用这个画刷来绘制滚动条背景。
发送条件:这个消息是发送到滚动条的父窗口,当滚动条需要重新绘制的时候。
9:WM_CTLCOLORSTATIC
wParam :HDC,lParam :HWND
注意:如果应用程序处理这个消息,它必须返回一个画刷的句柄,应用程序利用这个画刷来绘制静态窗口背景。