CreateWindow()

来源:互联网 发布:java杨辉三角 简单代码 编辑:程序博客网 时间:2024/05/16 12:58

由于这是我的第一篇博文,粗略的介绍下我在使用CreateWindow()函数时遇到的问题,用CreateWindow创建窗口,成功是返回窗口句柄,但是我在此函数的第一个参数LPCTSTR lpClassName 中使用字符串“Button ”(注意末尾有空格),总是创建失败,而除掉空格后者返回成功,不知是怎么回事,此问题纠结了我很长时间,今挂出问题一来警示后人,二来求高手解答。谢

附源代码:

<span style="background-color: rgb(255, 255, 255);">#include <Windows.h>#define ID_SMALLER 1#define ID_LARGER 2#define BTN_WIDTH (8*cxChar)#define BTN_HEIGHT (4*cyChar)LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM);HINSTANCE hInst;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){static TCHAR szAppName[]="OwnDraw";MSG msg;HWND hwnd;WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WndProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=szAppName;wndclass.style=CS_HREDRAW |CS_VREDRAW;if (!RegisterClass(&wndclass)){MessageBox(NULL,"ERROR","System tip",MB_CANCELTRYCONTINUE);return 0;}hwnd=CreateWindow(szAppName,"OWN_Draw",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,nShowCmd);UpdateWindow(hwnd);while (GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}void Triangle(HDC hdc,POINT point[]){SelectObject(hdc,GetStockObject(BLACK_BRUSH));Polygon(hdc,point,3);SelectObject(hdc,GetStockObject(WHITE_BRUSH));}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static HWND hwndSmaller,hwndLarger;static int cxClient,cyClient,cxChar,cyChar;int cx,cy;LPDRAWITEMSTRUCT pdis;POINT pt[3];RECT rc;switch(message){case WM_CREATE:cxChar=LOWORD(GetDialogBaseUnits());cyChar=HIWORD(GetDialogBaseUnits());hwndSmaller=CreateWindow("Button ",TEXT(" "),WS_CHILD |WS_VISIBLE |BS_OWNERDRAW,0,0,BTN_WIDTH,BTN_HEIGHT,hwnd,(HMENU)ID_SMALLER,hInst,NULL);hwndLarger=CreateWindow("Button"," ",WS_CHILD |WS_VISIBLE |BS_OWNERDRAW,0,0,BTN_WIDTH,BTN_HEIGHT,hwnd,(HMENU)ID_LARGER,hInst,NULL);if (hwndSmaller==NULL || hwndLarger==NULL){MessageBox(NULL,"ERROR","Tip",MB_OK);} return 0;case WM_SIZE:cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);MoveWindow(hwndSmaller,cxClient/2-3*BTN_WIDTH/2,cyClient/2-BTN_HEIGHT/2,BTN_WIDTH,BTN_HEIGHT,TRUE);MoveWindow(hwndLarger,cxClient/2+BTN_WIDTH/2,cyClient/2-BTN_HEIGHT/2,BTN_WIDTH,BTN_HEIGHT,TRUE);return 0;case WM_COMMAND:GetWindowRect(hwnd,&rc);switch(wParam){case ID_SMALLER:rc.left+=cxClient/20;rc.right-=cxClient/20;rc.top+=cyClient/20;rc.bottom-=cyClient/20;break;case ID_LARGER:rc.left-=cxClient/20;rc.right+=cxClient/20;rc.top-=cyClient/20;rc.bottom+=cyClient/20;break;}MoveWindow(hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,TRUE);return 0;case WM_DRAWITEM:pdis=(LPDRAWITEMSTRUCT)lParam;FillRect(pdis->hDC,&pdis->rcItem,(HBRUSH)GetStockObject(WHITE_BRUSH));// FillRect(pdis->hDC,&pdis->rcItem,(HBRUSH)GetStockObject(BLACK_BRUSH));FrameRect (pdis->hDC, &pdis->rcItem,(HBRUSH) GetStockObject (BLACK_BRUSH)) ;// Draw inward and outward black trianglescx = pdis->rcItem.right  - pdis->rcItem.left ;cy = pdis->rcItem.bottom - pdis->rcItem.top  ;switch (pdis->CtlID){case ID_SMALLER :pt[0].x = 3 * cx / 8 ;  pt[0].y = 1 * cy / 8 ;pt[1].x = 5 * cx / 8 ;  pt[1].y = 1 * cy / 8 ;pt[2].x = 4 * cx / 8 ;  pt[2].y = 3 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 7 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;pt[1].x = 7 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;pt[2].x = 5 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 5 * cx / 8 ;  pt[0].y = 7 * cy / 8 ;pt[1].x = 3 * cx / 8 ;  pt[1].y = 7 * cy / 8 ;pt[2].x = 4 * cx / 8 ;  pt[2].y = 5 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 1 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;pt[1].x = 1 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;pt[2].x = 3 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;Triangle (pdis->hDC, pt) ;break ;case ID_LARGER :pt[0].x = 5 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;pt[1].x = 3 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;pt[2].x = 4 * cx / 8 ;  pt[2].y = 1 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 5 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;pt[1].x = 5 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;pt[2].x = 7 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 3 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;pt[1].x = 5 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;pt[2].x = 4 * cx / 8 ;  pt[2].y = 7 * cy / 8 ;Triangle (pdis->hDC, pt) ;pt[0].x = 3 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;pt[1].x = 3 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;pt[2].x = 1 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;Triangle (pdis->hDC, pt) ;break ;}// Invert the rectangle if the button is selectedif (pdis->itemState & ODS_SELECTED)InvertRect (pdis->hDC, &pdis->rcItem) ;// Draw a focus rectangle if the button has the focusif (pdis->itemState & ODS_FOCUS){pdis->rcItem.left   += cx / 16 ;pdis->rcItem.top    += cy / 16 ;pdis->rcItem.right  -= cx / 16 ;pdis->rcItem.bottom -= cy / 16 ;DrawFocusRect (pdis->hDC, &pdis->rcItem) ;}return 0 ;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}</span>

0 0
原创粉丝点击