|
发表于 2011-10-29 20:28:40
|
显示全部楼层
本帖最后由 yipwing 于 2011-10-29 21:28 编辑
楼主你看看,虽然还有问题,不过,你应该能明白..
以下是我改过后的代码... 代码有个问题,就是在按下B键后设置的颜色才正常能用..但是鼠标按下后又会变回黑色...(这个你应该明白了吧??)
- #include <windows.h>
- #include <stdio.h>
- #include <wingdi.h>
- #include <Windowsx.h>
- #define WM_MYMSG WM_USER+1
- #pragma comment(lib,"Gdi32.lib")
- LRESULT CALLBACK ShineProc(HWND hWnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam);
- int WINAPI WinMain( HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nShowCmd)
- {
- HWND hwnd;
- MSG msg;
- WNDCLASS wnd;
- wnd.cbClsExtra = 0;
- wnd.cbWndExtra = 0;
- wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
- wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wnd.hInstance = hInstance;
- wnd.lpfnWndProc = ShineProc;
- wnd.lpszClassName = "shine";
- wnd.lpszMenuName = NULL;
- wnd.style = CS_HREDRAW | CS_VREDRAW;
- if(!RegisterClass(&wnd))
- {
- MessageBox(NULL, "Register Fail", "Warning", MB_OK);
- return 0;
- }
- hwnd = CreateWindow( "shine", "MyWindowDemo", WS_OVERLAPPEDWINDOW,
- 10, 10, 600, 500, NULL, NULL, hInstance, 0);
- ShowWindow(hwnd, SW_SHOWNORMAL);
- while(GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
- }
- //全局变量区
- HDC hdc_draw;
- COLORREF currentcrf;
- HWND hwnd_temp;
- //全局变量区
- POINT pt = {0};
- LRESULT CALLBACK ShineProc(HWND hWnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam)
- {
- //变量定义区
- HDC hdc_text;
- char str[20] = TEXT("自制画图器");
- PAINTSTRUCT ps;
- RECT rect;
- LOGFONT lf = {0};
- CHOOSECOLOR cc = {0};
- COLORREF crf[16] = {0};
- //变量定义区
- switch(uMsg)
- {
-
- case WM_LBUTTONDOWN:
- hdc_draw = GetDC(hWnd);
- if (hdc_draw==NULL)
- {
- MessageBox(hWnd,"some thing error","Oops",MB_OK);
- }
- pt.x = LOWORD(lParam);
- pt.y = HIWORD(lParam);
- break;
- case WM_MOUSEMOVE:
- MoveToEx(hdc_draw, pt.x, pt.y, NULL);
- LineTo(hdc_draw, LOWORD(lParam), HIWORD(lParam));
- pt.x = LOWORD(lParam);
- pt.y = HIWORD(lParam);
- break;
- case WM_LBUTTONUP:
- ReleaseDC(hWnd, hdc_draw); //鼠标弹起按键后,释放了DC..
- break;
- case WM_CHAR:
- switch(wParam)
- {
- case 'b':
- case 'B':
- hdc_draw = GetDC(hWnd); //重新设置DC
- cc.lStructSize = sizeof(CHOOSECOLOR);
- cc.lpCustColors = crf;
- cc.Flags = CC_FULLOPEN;
- ChooseColor(&cc);
- SelectObject(hdc_draw, GetStockObject(DC_PEN));
- if (SetDCPenColor(hdc_draw, RGB(0,0,255))==CLR_INVALID)
- {
- MessageBox(hWnd,"error","oops..",MB_OK);
- }
- break;
- ReleaseDC(hWnd,hdc_draw);
- }
- break;
- case WM_PAINT:
- hdc_text = BeginPaint(hWnd, &ps);
- SetTextColor(hdc_text, RGB(0, 0, 255));
- GetWindowRect(hWnd, &rect);
- lf.lfHeight = 50;
- lf.lfUnderline = 1;
- SelectObject(hdc_text, CreateFontIndirect(&lf));
- TextOut(hdc_text, (rect.right-rect.left)/2-120 , 10, str, strlen(str));
- EndPaint(hWnd, &ps);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- }
- return DefWindowProc(hWnd, uMsg, wParam, lParam);
- }
复制代码
|
|