// WndConst.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "iostream" HINSTANCE g_hInst = NULL; HANDLE g_hStdOut=NULL; HWND hSD=NULL; void onCreate(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { //char szText[50]="hello listbox"; //SBS_HORZ SBS_VERT也是滚动条 对应的消息处理的WM_HSCROLL WM_VSCROLL //SBM_SETRANGE 设置滚动条的滚动范围 lparam 最小值 wparam最大 SBM_GETRANGE 获取滚动条的值对于的事件SB_LINEUP SB_LINEDOWN SB_PAGELEFT SB_PAGERIGHT //鼠标拉动滚动条 使其停留在鼠标UP的位置 用SB_THUMBPOSITION SendMessage(hMenus,SBM_SETPOS,pos,TRUE); //hSD=CreateWindow("LISTBOX","LISTBX",WS_CHILD|WS_VISIBLE|SBS_HORZ|SBS_VERT,100,100,100,150,hWnd,(HMENU)10001,g_hInst,NULL); //SendMessage(hMenus,SBM_SETRANGE,0,300); //SendMessage(hMenus,LB_INSERTSTRING,0,(LPARAM)szText); CreateWindow("BUTTON","BUTTON",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,50,100,100,100,hWnd,(HMENU)1001,g_hInst,NULL); } void onDrawitem(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT pDis=(LPDRAWITEMSTRUCT)lParam; if(ODT_BUTTON==pDis->CtlType) { HBRUSH hOldBrush=NULL; HBRUSH hBrush=NULL; //设置文字背景色为透明 int Sold= SetBkMode(pDis->hDC,TRANSPARENT); if(pDis->itemState & ODS_SELECTED){ //绘制一个圆角的按钮 hBrush=CreateSolidBrush(RGB(87,139,87)); hOldBrush=(HBRUSH)SelectObject(pDis->hDC,hBrush); RoundRect(pDis->hDC,pDis->rcItem.left,pDis->rcItem.top, pDis->rcItem.right,pDis->rcItem.bottom,15,15); }else{ hBrush=CreateSolidBrush(RGB(165,100,1)); hOldBrush=(HBRUSH)SelectObject(pDis->hDC,hBrush); RoundRect(pDis->hDC,pDis->rcItem.left,pDis->rcItem.top, pDis->rcItem.right,pDis->rcItem.bottom,15,15); } char szName[260]={0}; //获取句柄的文字 GetWindowText(pDis->hwndItem,szName,260); //绘制 DrawText(pDis->hDC,szName,strlen(szName), &pDis->rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE); SelectObject(pDis->hDC,hOldBrush); DeleteObject(hBrush); //用完后恢复 SetBkMode(pDis->hDC,Sold); } } void onPaint(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps={0}; HDC hDC=BeginPaint(hWnd,&ps); SendMessage(hWnd,SBM_SETRANGE,300,true); int s; int vP=SendMessage(hWnd,SBM_GETRANGE,s,0); int vV=SendMessage(hWnd,SBM_GETRANGE,0,0); EndPaint(hWnd,&ps); } void onMeasureItem(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { LPMEASUREITEMSTRUCT pMis=(LPMEASUREITEMSTRUCT)lParam; pMis->itemHeight=200; } LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { switch( nMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; case WM_CREATE: onCreate(hWnd,nMsg,wParam,lParam); break; case WM_PAINT: onPaint(hWnd,nMsg,wParam,lParam); break; case WM_DRAWITEM: onDrawitem(hWnd,nMsg,wParam,lParam); break; case WM_MEASUREITEM: onMeasureItem(hWnd,nMsg,wParam,lParam); } return DefWindowProc( hWnd, nMsg, wParam, lParam ); } BOOL RegisterWnd( LPSTR pszClassName ) { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof( wce ); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.hbrBackground = HBRUSH(COLOR_SCROLLBAR+1); wce.hCursor = NULL; wce.hIcon = NULL; wce.hIconSm = NULL; wce.hInstance = g_hInst; wce.lpfnWndProc = WndProc; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.style = CS_VREDRAW|CS_HREDRAW; ATOM nAtom = RegisterClassEx( &wce ); if( 0 == nAtom ) { return FALSE; } return TRUE; } HWND CreateWnd( LPSTR pszClassName ) { HWND hWnd = CreateWindowEx( 0, pszClassName, "MyWnd", WS_TILEDWINDOW|WS_CLIPCHILDREN|SBM_SETRANGE|WS_CLIPCHILDREN|WS_VSCROLL|WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInst, 0 ); return hWnd; } void DisplayWnd( HWND hWnd ) { ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); } void Message( ) { MSG msg = {0}; while ( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } void NewConsole( ) { AllocConsole( ); g_hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. NewConsole( ); g_hInst = hInstance; RegisterWnd( "MYWND" ); HWND hWnd = CreateWnd( "MYWND" ); DisplayWnd( hWnd ); Message( ); return 0; }