#現在やっていること
現在C++を学びながらソフトを制作しようとしております。そこでQtとかGUIのライブラリを使う手もあったのですがやはりwinapiで作ったほうがいろいろデザインもできるし学べることも多いのかなと(結局はライブラリもwinapi使ってるかな)winapiで制作してます。しかし情報が極めて不足していてほとんどがC#か.NETの情報です。
#困ったこと
####1.四角形が黒枠がついてしまう<解決済み>
黒枠を消したいです
C++
1case WM_DRAWITEM: 2 hdc = ((LPDRAWITEMSTRUCT)(lp))->hDC; 3 4 if (((LPDRAWITEMSTRUCT)(lp))->itemState & ODS_SELECTED) { 5 SelectObject(hdc, CreateSolidBrush(RGB(80, 91, 109))); 6 std::cout<<"[INFO] ON\n"; 7 }else { 8 SelectObject(hdc, CreateSolidBrush(RGB(73, 147, 120))); 9 std::cout<<"[INFO] OFF\n"; 10 } 11 Rectangle(hdc , 0 , 0 , 12 ((LPDRAWITEMSTRUCT)(lp))->rcItem.right , 13 ((LPDRAWITEMSTRUCT)(lp))->rcItem.bottom 14 ); 15 DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH))); 16 return TRUE;
おそらくRectangleの部分の問題だと思います。が分かりませんでした。C#、.NETの情報しか出てきません。
####2.ホバーエフェクトの実装方法__<未解決>__
ホバーエフェクトというかマウスが上にある時に影を3秒ぐらい時間をかけてつけたいです。(ちょうどhtml,cssのデザインのように)日本語、英語で数時間検索してもどのようにすればよいのかわかりません。
####3.dc = ((LPDRAWITEMSTRUCT)(lp))->hDC;や((LPDRAWITEMSTRUCT)(lp))->rcItem.rightの意味が分からない<解決済み>
愚かな質問かもしれません。数日検索して理解しようとしましたがわかりませんでした。
#その他
前回の質問でも迷惑をかけてしまったかもしれません。初心者マークをつけさせていただきました。少しずつ学んでいきたいと思います。よろしくお願いいたします。
#コード全掲
C++
1#include <windows.h> 2#include <cstdio> 3#include <iostream> 4#include <string> 5 6static int width = 0, height = 0; 7 8LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 9 10 HDC hdc; 11 PAINTSTRUCT ps; 12 13 14 switch (msg) { 15 case WM_DESTROY: 16 PostQuitMessage(0); 17 18 printf("[INFO] Program is about to finish."); 19 20 return 0; 21 22 23 case WM_SIZE: 24 width = LOWORD(lp); 25 height = HIWORD(lp); 26 27 std::cout<<"[INFO] width:"<<width<<"---"; 28 std::cout<<"[INFO] height:"<<height<<"\n"; 29 30 return 0; 31 32 33 case WM_CREATE: 34 CreateWindow( 35 TEXT("BUTTON") , TEXT("U") , 36 WS_CHILD | WS_VISIBLE | BS_OWNERDRAW , 37 0 , 0 , 400 , 400 , 38 hwnd , (HMENU)1 , 39 ((LPCREATESTRUCT)(lp))->hInstance , NULL 40 ); 41 return 0; 42 43 44 case WM_DRAWITEM: 45 hdc = ((LPDRAWITEMSTRUCT)(lp))->hDC; 46 47 if (((LPDRAWITEMSTRUCT)(lp))->itemState & ODS_SELECTED) { 48 SelectObject(hdc, CreateSolidBrush(RGB(80, 91, 109))); 49 std::cout<<"[INFO] ON\n"; 50 }else { 51 SelectObject(hdc, CreateSolidBrush(RGB(73, 147, 120))); 52 std::cout<<"[INFO] OFF\n"; 53 } 54 Rectangle(hdc , 0 , 0 , 55 ((LPDRAWITEMSTRUCT)(lp))->rcItem.right , 56 ((LPDRAWITEMSTRUCT)(lp))->rcItem.bottom 57 ); 58 DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH))); 59 return TRUE; 60 61 } 62 return DefWindowProc(hwnd , msg , wp , lp); 63} 64 65 66 67int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , 68 PSTR lpCmdLine , int nCmdShow ) { 69 70 printf("[INFO] Program has just started.\n"); 71 72 HWND hwnd; 73 MSG msg; 74 WNDCLASS winc; 75 76 winc.style = CS_HREDRAW | CS_VREDRAW; 77 winc.lpfnWndProc = WndProc; 78 winc.cbClsExtra = winc.cbWndExtra = 0; 79 winc.hInstance = hInstance; 80 winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); 81 winc.hCursor = LoadCursor(NULL , IDC_ARROW); 82 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 83 winc.lpszMenuName = NULL; 84 winc.lpszClassName = TEXT("U"); 85 86 if (!RegisterClass(&winc)) return -1; 87 88 hwnd = CreateWindow( 89 TEXT("U") , TEXT("U") , 90 WS_OVERLAPPEDWINDOW | WS_VISIBLE , 91 CW_USEDEFAULT , CW_USEDEFAULT , 92 CW_USEDEFAULT , CW_USEDEFAULT , 93 NULL , NULL , hInstance , NULL 94 ); 95 96 if (hwnd == NULL) return -1; 97 98 99 while(GetMessage(&msg , NULL , 0 , 0)) { 100 TranslateMessage(&msg); 101 DispatchMessage(&msg); 102 } 103 104 return msg.wParam; 105}