「ws_visible」的推薦目錄:
- 關於ws_visible 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於ws_visible 在 大象中醫 Youtube 的最讚貼文
- 關於ws_visible 在 大象中醫 Youtube 的最佳解答
- 關於ws_visible 在 [問題] C++ Win32 API EDIT Window的問題- 看板C_and_CPP 的評價
- 關於ws_visible 在 How to make a Win32 control created without WS_VISIBLE ... 的評價
- 關於ws_visible 在 Windows-classic-samples/GenProfile.rc at main - GitHub 的評價
- 關於ws_visible 在 Q112181: Changing the Style of Secondary Viewer Windows 的評價
ws_visible 在 大象中醫 Youtube 的最讚貼文
ws_visible 在 大象中醫 Youtube 的最佳解答
ws_visible 在 Windows-classic-samples/GenProfile.rc at main - GitHub 的推薦與評價
WS_VISIBLE. EDITTEXT IDC_TXTSharedBitrate,165,58,17,12,ES_WANTRETURN |. ES_NUMBER | NOT WS_VISIBLE. GROUPBOX "Mandatory Streams",IDC_FRAMandatoryStreams,271 ... ... <看更多>
ws_visible 在 [問題] C++ Win32 API EDIT Window的問題- 看板C_and_CPP 的推薦與評價
平台:Visual Studio 2010
小弟最近在學視窗程式的編寫
想說先從最底層的Win32 API開始,應該能比較了解整個視窗的運作
但...找了一下坊間講到C++視窗程式的書大多都是講MFC
對於Win32 API都只有幾頁帶過,教你怎麼創個空的視窗就沒了
有研究一下那些在講MFC的書,覺得那對小弟而言實在太難了
而且版上大大好像也不推薦
所以我打算把Win32 API的一些基礎跟流程摸熟之後轉至Qt
Qt對我而言應該是比較好上手
以下是小弟的問題
我現在在主視窗中開了兩個EDIT WINDOW跟一個BUTTON
想要作一些簡單的功能
程式碼部分:
先宣告了全域變數
HWND B1,B2,text1; //存子視窗的handle
TCHAR ch1[100]=" "; //之後要用的字串
在WinMain函式裡面把BUTTON跟EDIT視窗的handle存進去
B1 = CreateWindow(
_T("BUTTON"),
_T("按鈕1"),
WS_CHILD|WS_VISIBLE|WS_BORDER,
10, 10, 50, 20,
hWnd, NULL, hInstance, NULL);
text1 = CreateWindow(
_T("EDIT"),
NULL,
WS_CHILD|WS_VISIBLE|WS_BORDER,
80, 10, 100, 20,
hWnd, NULL, hInstance, NULL);
text2 = CreateWindow(
_T("EDIT"),
NULL,
WS_CHILD|WS_VISIBLE|WS_BORDER,
80, 40, 100, 20,
hWnd, NULL, hInstance, NULL);
SendMessage(text2,ES_READONLY,0,0);
然後在WndProc函式裡
case WM_COMMAND:
{if (HWND(lParam) == B1)
{
SendMessage(text2,EM_UNDO,0,0);
SendMessage(text1,EM_GETLINE,0,(LPARAM)ch1);
K=int(ch1[0]);
K-=48;//0在unicode是48
K*=2;//數字乘2
K+=48;//數字變回對應的unicode碼
ch1[0]=TCHAR(K);
SendMessage(text2,EM_REPLACESEL,1,(LPARAM)ch1);
InvalidateRect(hWnd,NULL,TRUE);
}
return 0;}
上面的功能就是要讓使用者在第一個EDIT輸入數字
按按鈕後就會讓該數字乘以2後顯示在第二個EDIT
但是...上面的做法沒有考慮輸入或輸出超過兩位的情況,而且也不能處理浮點數
雖然硬要做還是可以(用個迴圈檢查有沒有小數點之類的)
想請問如果要做這種接受數字型態input的視窗程式有沒有更好的作法?
另外再請問一下用CreateWindow做出來的BUTTON有沒有辦法幫他定義識別碼ID?
還是只能用全域變數紀錄他的handler?
還有WndProc接收的HWND型態的引數hWnd是哪一個視窗的handler?
就我所了解程式呼叫WndProc的時機是訊息迴圈從訊息佇列抓到訊息
然後呼叫DisPatch函式後進入
但是他好像也不是目前送出訊息的視窗的handler
因為if條件那邊如果改成 if(hWnd == B1)的話
按按鈕就沒有反應了
那這個hWnd到底是誰勒??
另外處理不同的訊息只用這種 if switch case的寫法嗎
這樣如果程式規模越來越大感覺會很難維護
感謝大大解答,剛開始學習視窗程式實在有好多疑問
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.213.139
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1457020698.A.5D0.html
03/04 00:01
... <看更多>