2025 02,01 14:49 |
|
2006 07,19 23:52 |
|
銘柄の編集画面EditStockです。特にどういう事もないDialogBoxにEditControl、ListBox(DropDown Style)、CheckBoxを付けただけの画面です。実際には2画面目でListViewControl内のitemである銘柄名をDoubleClickする事で、この画面(銘柄の変更ModifyStock)へ飛んできます。 ここでポートフォーリオには入れてあるけれど、一次的に表示したくない(株価更新しない)場合には、CheckBoxのチェックを外しておきます。そうすると。。。 ListViewの該当ItemはGray表示されます。 これです。この1ItemのColorを変更出来なくて、変更出来なくて、変更出来なくて、4日悩んで今動きました。 最初はこのDialogBoxではListBoxで大方書き上げていて、一行だけのTextColorの変更はどうやるかで行き詰まっていました。CheckBoxを頭に付ける案もありますし、銘柄名だけでなく、株価コードも付ける案もあります。結局ListViewでRewriteする事にしましたが、ListView Control自身扱いが難しいです。ListBoxでは直感的にどのMessageを投げてやればしたいことが出来るか、EVCのHelpでLB_XXXXと適当にタイプすると見つかったのですが、ItemにInsert時設定した32bit Dataを取り出すだけで大変でした。 知っていれば簡単な事ですが、LVM_GETITEMTEXTのメッセージで引き渡すBlockにLVIF_TEXT | LVIF_PARAMとかやっても取れないのです。LVM_GETITEMを使わないとTEXTは取れてもlParamが取れず、エラーも帰らないため、時間を使いました。 カスタム・ドローはさすがにEVCのHelpだけでは書けないので、 なめ猫じゃなくて「猫でもわかるプログラミング」で勉強させてもらいましたが、CreateWindowで作ったWindow上のListViewのカスタム・ドローとDialogBox上に置いたListViewでは変えないと動かない箇所がありました。それがわかるまでは、WM_NOTIFYで受け取るメッセージのNM_CUSTOMDRAWを捕まえて(ウンウン来てる来てる)、return CDRF_NOTIFYITEMDRAW; することでCDDS_ITEMPREPAINTを捕まえてItemDraw前にFontや、TextColor、TextBkColorの変更が出来るわけだ。。。来ないなあ、Debugger起動してトレースしても、来ていない。 結局下記ソースの赤色文字で書いたように、SetWindowLongでDWL_MSGRESULTを使ってCDRF_NOTIFYITEMDRAWを戻すようにする事でうごきました。 参考までに。。。 case WM_NOTIFY: lpnmhdr = (LPNMHDR)lParam; if (lpnmhdr->idFrom == IDC_STOCKLIST) {// Notification Message from StockList (ListView Control) lvinfo = (LPNMLISTVIEW)lParam; switch (lvinfo->hdr.code) { case NM_CUSTOMDRAW: // Custom Draw for Item in the ListView Control. lplvcd = (LPNMLVCUSTOMDRAW)lParam; if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT) { SetWindowLong(hwndDlg, (INT)DWL_MSGRESULT, (LONG)CDRF_NOTIFYITEMDRAW); return TRUE; } if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { lv.mask = LVIF_PARAM; lv.iItem = lplvcd->nmcd.dwItemSpec; lv.iSubItem = 0; iRet = SendMessage(lvinfo->hdr.hwndFrom, LVM_GETITEM, (WPARAM)0, (LPARAM)&lv); if (!g_lpCurPfo->stocks[lv.lParam].Enabled) { lplvcd->clrText = GRAY; SetWindowLong(hwndDlg, (INT)DWL_MSGRESULT, (LONG)CDRF_NEWFONT); return TRUE; } } break; PR |
|
コメント |
コメント投稿 |
|
trackback |
トラックバックURL |
忍者ブログ [PR] |